【问题标题】:Why docker container can't see volume on different container?为什么 docker 容器看不到不同容器上的卷?
【发布时间】:2020-03-08 17:57:12
【问题描述】:

我有 2 个使用 docker-compose up 启动的容器。 第一个我只是从 docker hub nginx:stable 我在集线器的 php 之上构建的第二个

dockerfile

FROM composer:1.9.3
RUN mkdir /fatfree
RUN ["composer","require","bcosca/fatfree-core","--working-dir","/fatfree"]

FROM php:7.4-fpm
COPY --from=0 /fatfree /fatfree

我也在上述文件中尝试了VOLUME /fatfree,但无济于事。

docker-compose.yml

version: "3.7"

services:
  webserver:
    image: nginx:stable
    ports:
      - "80:8080"
    volumes:
      - ./www:/www
      - fatfree:/fatfree
    links:
      - php
  php:
    build:
      context: .
      dockerfile: dockerfile
    volumes:
      - ./www:/www
      - "fatfree:/fatfree"
volumes:
  fatfree:

如果我正确解释了 docker 文档,我的 www/index.php 应该能够看到 /fatfree 中的任何内容,但它没有。文件夹本身显示出来,但它看起来是空的。

如果我以交互方式运行 dockerfile docker container run -i -t test bash ,则 /fatfree 文件夹存在并且它包含我希望它拥有的所有文件。

有很多 stackoverflow 问题询问如何实现这一点,它们似乎都表明我正在做的实际上是好的,但它不起作用,我不知道为什么。 任何建议表示赞赏。

【问题讨论】:

    标签: docker docker-compose dockerfile docker-volume


    【解决方案1】:

    您的映射不正确。

    你想要:

    volumes:
    - /fatfree:/www
    

    第一个条目/fatfree 指的是主机上的路径。

    第二个条目/www 指的是容器中的路径。

    在我的示例中,您主机的 /fatfree 目录(和内容)将映射到容器的 /www 目录。

    根据需要更改。

    【讨论】:

    • 主机上没有 /fatfree。我想从 webserver 容器中的 php 容器中访问 /fatfree 文件夹。
    • 我不清楚您的意图,但是,如果您希望将 docker 卷 fatfree 映射到容器上的 /www 目录,则映射需要为 fatree:/www
    • 这不是我想要的。我想将 dockerfile 中创建的 fatfree 文件夹映射到 webserver 容器的 /fatfree 文件夹。对于这个问题,我们可以忽略 docker-compose.yml 中的 www 行
    • 经过数小时的各种测试后,docker system prune -adocker-compose up 解决了这个问题。除了运行这两个命令之外,我仍然不知道将来如何防止这种情况发生
    猜你喜欢
    • 2014-08-08
    • 2016-08-28
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多