我正在关注 testdriven.io 上的 flask /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",
...
最佳答案
问题是您无法将卷安装到容器中的现有路径并期望该路径中的数据被同步。这不是 unix 卷挂载的工作方式。
可以在这里找到解释:
https://github.com/moby/moby/issues/32203
如果您需要使容器内的数据持久化,请查看此处:
https://github.com/moby/moby/issues/4361#issuecomment-36317097
关于python - docker-compose 卷未正确安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45543229/