在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 run hello-world
3.与Docker共享C:\
打开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 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
或其他)。