我想在Windows 8上运行Docker Compose应用程序。我在Ubuntu 16.04下运行它并完全正常工作。
这个Docker Compose运行:
两个容器使用卷。
我的.env
文件:
COMPOSE_CONVERT_WINDOWS_PATHS=1
APPLICATION_PATH=//C/Users/my_user/Documents/Development/my_application
我的docker-compose.yml
文件:
version: '2'
services:
web:
build: ../application-web/
ports:
- "80:80"
tty: true
# Add a volume to link php code on the host and inside the container
volumes:
- ${APPLICATION_PATH}:/usr/share/nginx/html/application
- ${APPLICATION_PATH}/docker_files/docker-assistant:/usr/share/nginx/html/assistant
# Add hostnames to allow devs to call special url to open sites
extra_hosts:
- "localhost:127.0.0.1"
- "assistant.docker:127.0.0.1"
- "application.dev:127.0.0.1"
depends_on:
- custom-php
links:
- custom-php:custom-php
custom-php:
build: ../application-php/
ports:
- "50:50"
volumes:
- ${APPLICATION_PATH}:/usr/share/nginx/html/application
- ${APPLICATION_PATH}/docker_files/docker-assistant:/usr/share/nginx/html/assistant
当我运行docker-compose up
时,一切顺利。容器开始。
但是当我尝试在我的网络浏览器中访问http://192.168.99.100时,我收到403错误。
我的调查显示nginx和php容器中没有挂载卷:
docker exec -it compose_web_1 bash
ls -la /usr/share/nginx/html/assistant/
显示
drwxr.xr.x 2 root root 80 May 18 15:30 .
drwxr.xr.x 2 root root 4096 May 18 16:10 ..
似乎Docker无法安装卷。为什么呢?
APPLICATION_PATH
的环境变量//C:/Users/my_user/Documents/Development/my_application
无法正常工作,因为Docker使用":"字符作为卷声明的分隔符:
错误:卷// C:/ Users / my_user / Documents / Development / my_application:// C:/ Users / my_user / Documents / Development / my_application格式不正确,应为外部:内部[:mode]
这不是nginx问题,因为当我在文件夹中创建index.phtml
文件时,我可以运行它:
<?php
echo 'Hello world!';
答案 0 :(得分:11)
好的,我终于做到了!
按照这些说明操作,即可访问容器内的C:\。
去这里:https://www.docker.com/products/docker-toolbox
安装它。
打开Docker快速入门终端。
在其中运行:
docker run hello-world
打开Virtualbox
打开default
虚拟机的配置,然后转到shared folders
单击右侧的按钮修改或创建新的共享文件夹。将选项设置为:
C:\
C
然后验证。
关闭default
虚拟机,然后重新启动它。
e.G。如果您有.env
个文件:
COMPOSE_CONVERT_WINDOWS_PATHS=1
APPLICATION_PATH=//C/path_from_C_to_the_folder_you_want_to_share_on_the_volume
/!\ 你 需要 将COMPOSE_CONVERT_WINDOWS_PATHS
设为1!
在Docker快速入门终端中:
转到Docker Compose文件夹,然后启动它:
cd /path_to_your_compose_folder
docker-compose up
Docker技术依赖于Linux命名空间。没有Linux,它无法工作。为了允许在Windows上使用Docker,Docker需要安装Linux虚拟机。所有容器都将在其中运行。
现在已在Virtualbox中创建并运行default
虚拟机,这就是您必须使用Virtualbox共享文件夹的原因。
共享后,default
虚拟机将在其中包含一个带有自定义名称的已装入文件夹(在上面的示例中,它是C
但它可能是elephant
管他呢)。
最后,Docker会将卷从default
虚拟机安装到容器中:您必须在卷声明中使用default
机器共享文件夹的名称(在上面的示例中,它&# 39; s C
但它可能是elephant
或其他任何内容。