关于python:docker-compose卷未正确安装

docker-compose volume not mounting correctly

我正在遵循testsdriven.io上的flask/docker教程。在第三节docker config的第一部分中,我按照说明将项目目录作为卷装入docker容器中进行开发。不幸的是,遵循本教程中的说明并不能使用Docker Compose正确安装卷。相反,容器中的目录是空的。

下面是有关容器的dockerfile。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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文件

1
2
3
4
5
6
7
8
9
10
11
version: '2.1'

services:

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

相关目录是用户服务容器内的/usr/src/app目录。当我这样做的时候:

1
2
3
>> docker-compose build
>> docker-compose up -d
>> docker-compose run users-service bash

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

我还看到过类似标题的堆栈上的其他贴子溢出,不幸的是,没有一个解决方案能够解决我的问题。我试过将本地卷路径从相对更改为绝对,但结果没有任何差异。提前感谢任何能够帮助他人的人。

编辑:

在容器上运行docker inspect后,在MountsConfig下找到的信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
"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",
        ...


问题是,您不能将卷装载到容器中的现有路径,并且期望该路径中的数据同步。这不是Unix卷装载的工作方式。

这里可以找到一个解释:

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

如果需要使容器内的数据持久化,请查看以下内容:

https://github.com/moby/moby/issues/4361问题注释-36317097


从Dockerfile中删除以下内容:

1
2
# add app
ADD . /usr/src/app

查看此处的答案了解更多信息:

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