在Windows 8上安装的Docker卷不起作用

上下文

我想在Windows 8上运行一个Docker Compose应用程序。我是在Ubuntu 16.04下运行的,而且完全可以使用它。

这个Docker组合运行:

  • nginx的
  • PHP-FPM

这两个容器使用卷。

我的.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不能挂载卷。 为什么?

其他信息

  • 我正在使用Docker Toolbox: https : //www.docker.com/products/docker-toolbox
  • 我知道这是很好的IP地址,因为当我尝试在我的networking浏览器中访问它时,我看到我的nginx容器显示日志。
  • 设置为//C:/Users/my_user/Documents/Development/my_application的环境variablesAPPLICATION_PATH无法工作,因为Docker使用“:”字符作为卷声明的分隔符:

    错误:卷// C:/ Users / my_user / Documents / Development / my_application:// C:/ Users / my_user / Documents / Development / my_application格式不正确,应为external:internal [:mode]

  • 这不是一个nginx问题,因为当我在文件夹中创build一个index.phtml文件,我能够运行它:

     <?php echo 'Hello world!'; 

好的,我终于做到了!

TL; DR

按照这些说明可以访问容器内的C:\。

1.安装Docker工具箱

去这里: https : //www.docker.com/products/docker-toolbox

安装它。

2.运行一个Hello world

打开一个Docker快速入门terminal。

Docker快速入门终端打开

运行:

 docker run hello-world 

3.与Docker共享C:\

打开Virtualbox

Virtualbox已打开

打开default虚拟机的configuration并转到shared folders

默认虚拟机的配置

点击右边的button修改或创build一个新的共享文件夹。 将选项设置为:

  • C:\
  • C
  • 自动安装
  • 永久configuration

然后validation。

在这里输入图像说明

4.激活共享

closuresdefault虚拟机,然后重新启动它。

5.设置你的path

eG如果您有.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!

6.开始撰写

在Docker快速入门terminal中:

Docker快速入门终端打开

转到您的Docker Compose文件夹,然后启动它:

 cd /path_to_your_compose_folder docker-compose up 

为什么我要这样做? 这太复杂了!

Docker技术依赖于Linux命名空间。 没有Linux,它不能工作。 为了允许在Windows上使用Docker,Docker需要安装一个Linux虚拟机。 所有的容器都会在里面运行。

码头堆栈解释

default虚拟机现在已经在Virtualbox中创build并运行,这就是为什么您必须使用Virtualbox共享您的文件夹。

共享后, default虚拟机将有一个自定义名称的挂载文件夹(在上面的例子中,它是C但它可能是elephant或其他)。

最后,Docker会将default虚拟机的卷装载到容器中:你必须在你的卷声明中使用default机器共享文件夹的名字(在上面的例子中,它是C但可能是elephant或其他)。

Docker文件夹共享解释