语境
我想在 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 使用“:”字符作为卷声明的分隔符:ERROR: Volume //C:/Users/my_user/Documents/Development/my_application://C:/Users/my_user/Documents/Development/my_application has incorrect format, should be external:internal[:mode]
index.phtml
时文件夹中的文件,我可以运行它:<?php
echo 'Hello world!';
最佳答案
好吧,我终于做到了!
TL; 博士
按照这些说明访问容器内的 C:\。
1.安装Docker工具箱
去这里拿:https://www.docker.com/products/docker-toolbox
安装它。
2. 运行一个 Hello world
打开 Docker 快速入门终端。
在里面运行:
docker run hello-world
3. 与 Docker 共享 C:\
打开虚拟机
default
的开启配置虚拟机并转至 shared folders
通过单击右侧的按钮修改或创建新的共享文件夹。将选项设置为:
C:\
C
然后验证。
4.激活分享
关闭
default
虚拟机然后重新启动它。5. 设置你的路径
例如。如果您有
.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. 开始你的 Compose
在 Docker 快速入门终端中:
转到您的 Docker Compose 文件夹,然后启动它:
cd /path_to_your_compose_folder
docker-compose up
我为什么要这样做?太复杂了!
Docker 技术依赖于 Linux 命名空间。没有 Linux,它就无法工作。要允许在 Windows 上使用 Docker,Docker 需要安装 Linux 虚拟机。所有的容器都将在其中运行。
default
虚拟机现在已在 Virtualbox 中创建并运行,这就是您必须使用 Virtualbox 共享文件夹的原因。分享后,
default
虚拟机将在其中安装一个带有自定义名称的文件夹(在上面的示例中,它是 C
,但也可以是 elephant
或其他名称)。最后,Docker 将从
default
挂载卷。虚拟机到容器:你得用default
的名字卷声明中的机器共享文件夹(在上面的示例中,它是 C
,但它可以是 elephant
或其他)。关于安装在 Windows 8 上的 Docker 卷不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44054058/