【问题标题】:docker-compose volume not mounting correctlydocker-compose 卷未正确安装
【发布时间】:2018-01-14 13:01:16
【问题描述】:

我正在关注testdriven.io 上的烧瓶/docker 教程。在第三部分Docker Config 的第一部分中,我按照说明将项目目录挂载为 docker 容器中的卷以进行开发。不幸的是,按照教程中的说明使用 docker-compose 无法正确安装卷。相反,容器内的目录是空的。

以下是相关容器的 Dockerfile。

FROM python:3.6.1

# set working directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# add requirements (to leverage Docker cache)
ADD ./requirements.txt /usr/src/app/requirements.txt

# install requirements
RUN pip install -r requirements.txt

# add app
ADD . /usr/src/app

# run server
CMD python manage.py runserver -h 0.0.0.0

这是 docker-compose.yml 文件

version: '2.1'

services:

  users-service:
    container_name: users-service
    build: .
    volumes:
      - '.:/usr/src/app'
    ports:
      - 5001:5000 # expose ports - HOST:CONTAINER

有问题的目录是 users-service 容器内的 /usr/src/app 目录。当我这样做时:

>> docker-compose build 
>> docker-compose up -d
>> docker-compose run users-service bash

当我在容器内ls 时,我位于正确的目录 (/usr/src/app) 中,但该目录为空。这也会导致 CMD 失败,因为它找不到项目目录根目录中的 manage.py 文件。

我在 stack-overflow 上看到过其他类似标题的帖子,不幸的是,没有一个解决方案能够解决我的问题。我已经尝试将本地卷路径从相对更改为绝对,结果没有差异。提前感谢任何能够帮助同伴的人。

编辑:

在容器上运行docker inspect,下面是在Mounts 和Config - Volume 下找到的信息:

"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/jonathan/projects/flask-microservices-users",
                "Destination": "/usr/src/app",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
 ...
 "Config": {
        ...
        "Image": "flaskmicroservicesusers_users-service",
        "Volumes": {
            "/usr/src/app": {}
        },
        "WorkingDir": "/usr/src/app",
        ...

【问题讨论】:

  • 您要挂载的目录中有什么? .不是空的吗?
  • 我挂载的目录是项目的根目录。 me@ubuntu:~/project$ ls Dockerfile manage.py README.md docker-compose.yml project requirements.txt
  • 你能在你的用户服务容器上做 docker inspect 并检查它有多少卷吗?
  • 不幸的是容器没有继续运行。如果没有正确挂载卷,则容器内缺少 manage.py 文件和项目目录,因此它在运行时不会持续存在。
  • 但您仍然可以在停止的容器上运行检查

标签: python docker flask docker-compose docker-machine


【解决方案1】:

从您的 Dockerfile 中删除以下内容:

# add app
ADD . /usr/src/app

在此处查看答案以获取更多信息:

https://stackoverflow.com/a/27753725/1799408

【讨论】:

  • 您好 Michael,感谢您的建议,很遗憾它没有解决问题。即使在清除 docker 缓存并从头开始之后。我已经编辑了我的原始评论,以在容器上包含 docker compose 的结果。
【解决方案2】:

问题是您无法将卷装载到容器中的现有路径并期望该路径中的数据被同步。这不是 unix 卷挂载的工作方式。

可以在这里找到解释:

https://github.com/moby/moby/issues/32203

如果您需要使容器内的数据持久化,请查看此处:

https://github.com/moby/moby/issues/4361#issuecomment-36317097

【讨论】:

    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2021-05-29
    相关资源
    最近更新 更多