【问题标题】:Docker volumes mounting on Windows 8 is not working在 Windows 8 上挂载的 Docker 卷不起作用
【发布时间】:2017-06-13 13:46:17
【问题描述】:

上下文

我想在 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 容器显示日志。
  • 设置为//C:/Users/my_user/Documents/Development/my_application的环境变量APPLICATION_PATH无法工作,因为Docker使用“:”字符作为卷声明的分隔符:

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

  • 这不是 nginx 的问题,因为当我在文件夹中创建 index.phtml 文件时,我可以运行它:

    <?php
    echo 'Hello world!';
    

【问题讨论】:

  • 你使用“docker for windows”吗?您能否验证卷“C”是否已共享?您能否在应用程序路径中添加冒号(APPLICATION_PATH=C:/Users/my_user/Documents/Development/my_application)。也许this 会有所帮助。此外,请验证IP地址。
  • 如何验证“C”是共享的?对于其他问题,我编辑了我的原始帖子。
  • @Holger 感谢您的问题,我能够找到问题所在。您可以在下面看到我的回答,谢谢!
  • 和往常一样,我很高兴知道为什么我的问题被否决了:|

标签: docker docker-compose


【解决方案1】:

好吧,我终于做到了!

TL;DR

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

1。安装 Docker 工具箱

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

安装它。

2。运行一个 Hello 世界

打开 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。开始撰写

在 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 或其他)。

【讨论】:

  • 非常感谢,我为此苦苦挣扎了很长一段时间,感谢您的帖子,我解决了这个问题。
猜你喜欢
  • 2021-07-16
  • 2019-09-04
  • 2017-08-17
  • 2020-11-11
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多