在Windows 8上安装的Docker卷无法正常工作

时间:2017-05-18 17:11:48

标签: docker docker-compose

上下文

我想在Windows 8上运行Docker Compose应用程序。我在Ubuntu 16.04下运行它并完全正常工作。

这个Docker Compose运行:

  • 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工具箱:https://www.docker.com/products/docker-toolbox
  • 我知道这是一个很好的IP地址,因为当我尝试在我的网络浏览器中访问它时,我看到我的nginx容器显示了日志。
  • 设置为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!';
    

1 个答案:

答案 0 :(得分:11)

好的,我终于做到了!

TL; DR

按照这些说明操作,即可访问容器内的C:\。

1。安装Docker Toolbox

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

安装它。

2。运行Hello world

打开Docker快速入门终端。

Docker Quickstart Terminal opened

在其中运行:

docker run hello-world

3。与Docker共享C:\

打开Virtualbox

Virtualbox opened

打开default虚拟机的配置,然后转到shared folders

Configuration of the default virtual machine

单击右侧的按钮修改或创建新的共享文件夹。将选项设置为:

  • C:\
  • C
  • 自动挂载
  • 永久配置

然后验证。

enter image description here

4。激活分享

关闭default虚拟机,然后重新启动它。

5。设置路径

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!

6。开始撰写

在Docker快速入门终端中:

Docker Quickstart Terminal opened

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

cd /path_to_your_compose_folder
docker-compose up

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

Docker技术依赖于Linux命名空间。没有Linux,它无法工作。为了允许在Windows上使用Docker,Docker需要安装Linux虚拟机。所有容器都将在其中运行。

Docker stack explained

现在已在Virtualbox中创建并运行default虚拟机,这就是您必须使用Virtualbox共享文件夹的原因。

共享后,default虚拟机将在其中包含一个带有自定义名称的已装入文件夹(在上面的示例中,它是C但它可能是elephant管他呢)。

最后,Docker会将卷从default虚拟机安装到容器中:您必须在卷声明中使用default机器共享文件夹的名称(在上面的示例中,它&# 39; s C但它可能是elephant或其他任何内容。

Docker folder share explained