docker-compose音量未正确安装

Jon*_*man 6 python flask docker docker-compose docker-machine

我正在关注testdriven.io上的flask/docker教程.在第三部分Docker配置的第一部分中,我按照说明将程序目录作为卷安装在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
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

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

>> docker-compose build 
>> docker-compose up -d
>> docker-compose run users-service bash
Run Code Online (Sandbox Code Playgroud)

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

我已经看到堆栈溢出的其他帖子有类似的标题,不幸的是没有一个解决方案能够解决我的问题.我已经尝试将本地音量路径从相对位置更改为绝对值,但结果没有差异.请提前感谢任何能够帮助其他人的人.

编辑:

docker inspect容器上运行,下面是MountsConfig- 下面的信息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",
        ...
Run Code Online (Sandbox Code Playgroud)

Pul*_*ara 4

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

可以在这里找到解释:

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

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

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