【问题标题】:Docker volumes not bindingDocker 卷未绑定
【发布时间】:2018-02-02 14:04:50
【问题描述】:

我一直在为这个看起来很简单的问题而烦恼,但我无法弄清楚我做错了什么。

我正在尝试设置一个 nginx 容器,该容器在不同的端口上提供一些动态 html 报告。为此,我尝试将包含 html 文件的卷绑定到正确的位置。

docker-compose 文件如下所示:

version: '3'

services:
  report-host:
    build: ./host
    image: host:latest
    network_mode: 'host'
    ports:
      - "5000:5000"
      - "5001:5001"
    volumes:
      - ./5000/:/var/www/port5000/
      - ./5001/:/var/www/port5001/
    command: nginx -g "daemon off;"

5000 和 5001 目录与 docker-compose 文件位于同一目录,并且都包含一个 index.html 文件。

构建主机映像的 dockerfile 非常简单:

FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf

# Create the volume directories
RUN mkdir -p /var/www/port5000/ && mkdir -p /var/www/port5001/

最后,conf 文件是准系统,因为它真的不需要任何特别的东西

events {
    worker_connections  1024;
}

http {
    server {
        listen       5000;
        root         /var/www/port5000/;
    }

    server {
        listen       5001;
        root         /var/www/port5001/;
    }
}

但是,当我运行 docker-compose run report-host ls var/www/port5000 时,该目录存在但只是空的。打开 localhost:5000 时,它只会给我一个找不到页面的消息。

为什么在这种情况下卷不绑定?我还有其他几个项目完全相同,并且它们确实绑定正确......

更新:我搞砸了一些,在某些时候 port5000 文件夹现在在我的卷中有一个子文件夹,但它仍然是空的。另一个文件夹具有相同的结构,但该卷不包含子文件夹。我开始认为发生了一些完全疯狂的事情,我将尝试完全卸载 docker,然后重新安装以尝试解决问题。

【问题讨论】:

  • 你在什么平台上运行 docker?
  • docker exec 进入容器。然后检查
  • @larsks 我正在使用 Docker for Windows 在 Windows 10 上运行 docker
  • 我没有 Windows 上的 docker 来测试这一点,但问题是:你的 docker 实际上并没有在 Windows 上运行。它在运行在 Windows 上的 Linux 虚拟机上运行,​​并且该 VM 具有自己的文件系统。您的本地 Windows 文件系统可能未正确公开。我不知道这应该如何或是否应该起作用,但也许这会提出一些调查途径。或者可能会有更熟悉 Windows 的人过来。

标签: docker nginx docker-compose dockerfile docker-volume


【解决方案1】:

我几天前更改了密码,显然这就是问题所在。我更新了 Docker for Windows Shared Drives 菜单中的凭据,使文件可以正确公开。

感谢@larsks 让我走上了解决问题的道路。

【讨论】:

    猜你喜欢
    • 2019-08-17
    • 2017-07-05
    • 2016-07-27
    • 2020-07-26
    • 2014-06-10
    • 2020-03-17
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多