因此,我正在使用docker-compose
与nginx一起运行一个简单的flask应用程序。
这里是docker-compose.yml
:
version: '3.2'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- 80:80
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- flask
networks:
- my-network
flask:
build:
context: .
dockerfile: Dockerfile
image: webapp-flask
container_name: flask
volumes:
- type: bind
source: ./
target: /app
- type: bind
source: ./users.json
target: /app/users.json
networks:
my-network:
aliases:
- flask-app
ports:
- 8080:5000
networks:
my-network:
在volumes:
部分中,我试图将当前主机目录绑定到主机上的/app
目录,以及users.json
文件(我想同步)
这是烧瓶的Dockerfile
:
FROM python:3
RUN pip install flask flask-restful
EXPOSE 5000
CMD python app/app.py
app.py
会根据请求对users.json
进行更改。一切正常,除了users.json
文件在容器上更新(例如,通过请求),该更新未反映在我的主机上。
仅供参考,我正在使用Windows和Docker Toolbox。 在主机和容器之间绑定users.json时,我需要做些特别的事情吗?
编辑:此问题是由于我自己的愚蠢造成的,首先是在Dockerfile
中使用python:3
图像,然后在docker-compose.yml
中使用图像我再次使用了webapp-flask
的新图像。我不知道为什么这首先不会造成冲突,但是显然,真正的问题在于,每当我运行docker-compose up
时,它都会使用旧文件的缓存版本,而从不重建容器。当我对app.py
进行更改时,我发现了这一点,并且在运行整个过程时它们没有生效。因此,我要做的就是删除较旧的容器,并删除在docker-compose.yml
中指定图像的行,并且行得通。
答案 0 :(得分:1)
几个问题:
users.json
文件在主机系统上的什么位置?它在您的应用程序目录之外吗? (如果没有,那么)users.json
文件作为其他目标。我的建议是可能在主机上创建一个附加的/data/
目录,该目录可用于容纳users.json
文件。因此,在您的docker-compose.yml
中是这样的:
flask:
build:
context: .
dockerfile: Dockerfile
image: webapp-flask
container_name: flask
volumes:
- .:/app/
- .:/data/
networks:
my-network:
aliases:
- flask-app
ports:
- 8080:5000
我不确定是否可以通过compose将卷挂载到显式的单个文件,并怀疑它可能需要是在卷yaml键中调出的整个目录。