Skip to main content
 首页 » 编程设计

python之Docker 中的应用程序不更新

2025年05月04日43sxdcgaq8080

我正在尝试在 docker 中运行一个简单的 Flask 应用程序。但似乎即使我更新我的 app.py 代码并重新启动 docker 容器也没有任何更新。

我在 OS X 上运行 docker。这是我遗漏的简单的东西还是预期的行为?

这是我的 docerfile 的样子:

FROM ubuntu:14.04.3 
 
# install dependencies 
RUN apt-get update 
RUN apt-get install -y nginx 
RUN apt-get install -y supervisor 
RUN apt-get install -y python3-pip 
 
# update working directories 
ADD ./app /app 
ADD ./config /config 
ADD requirements.txt / 
 
# install dependencies 
RUN pip3 install -r requirements.txt 
 
# setup config 
RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf 
RUN rm /etc/nginx/sites-enabled/default 
 
RUN ln -s /config/nginx.conf /etc/nginx/sites-enabled/ 
RUN ln -s /config/supervisor.conf /etc/supervisor/conf.d/ 
 
EXPOSE 80 
CMD ["supervisord", "-n"] 

请您参考如下方法:

Docker images(在 docker build -t app . 之后得到的)是一个“卡住”的快照。它不可编辑;它是您在那个时间点添加到图像中的任何内容的快照。

现在,一旦您运行一个图像,内容就会展开(将其想象成存档被解压缩),然后您在图像中定义的进程就会运行;这是一个容器。

正在运行的容器可以通过 docker ps 显示,图像(可以用来运行新容器的东西)通过 docker images 显示。

容器可以写入文件系统,但默认情况下,一旦容器停止,所有更改都会丢失。这些更改不会存储回图像。

在您重建它们之前,图像是不可变的,并且容器会继续使用它们启动时使用的图像。因此,使用导入 app.py 的 Dockerfile 方法,您需要运行以下命令来更新该文件:

docker build -t app . 
docker stop <container_id> 
docker rm <container_id> 
docker run -p 80:80 -d --name=my-app app 

您需要运行 docker ps -a 来获取您当前的容器 ID。通过命名您的容器,您可以通过“my-app”或您以后选择的任何其他名称来引用它。

请注意,这是进行更新的缓慢方式。为了更高效的开发,使用卷(对于 MacOS,这必须位于/Users 下):

docker run -p 80:80 -v $(pwd)/app:/app -d --name=my-app app 

现在,只要你更新你的应用程序文件夹,你就可以重新启动 python,假设它没有自动重新加载:

docker restart my-app