Docker中的应用程序不会更新
我想在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 镜像 ( docker build -t app .
后获得的镜像 )是一个“冻结”快照。 它不可编辑; 它是当时添加到图像中的任何快照。
现在,一旦你运行一个图像,内容被展开(想像它就像存档被解压缩),然后你在图像中定义的过程运行; 这是一个容器 。
运行容器可以通过docker ps
,并且图像(可以用来运行新容器的东西)由docker images
。
容器可以写入文件系统,但默认情况下,一旦容器停止,所有更改都将丢失。 这些更改不会存储回图像。
图像是不可变的,直到你重build它们,容器继续使用它们开始的图像。 因此,使用导入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
来获取当前的容器标识。 通过命名您的容器,您可以通过“my-app”或您select的任何其他名称来引用它。
请注意,这是执行更新的缓慢方法。 为了更有效的开发,使用一个卷(使用MacOS,它必须位于/ Users下):
docker run -p 80:80 -v $(pwd)/app:/app -d --name=my-app app
现在,无论何时你更新你的app文件夹,你都可以重新启动python,假设它没有自动重新加载:
docker restart my-app
- Pycharm和远程解释器(Docker)显示错误,但运行良好
- Google容器引擎公开服务“网站无法访问”
- 在docker-compose文件中更改泊坞窗容器中的PYTHONPATH
- docker“开始(Python)”不工作
- 从环境文件中读取环境variables
- 如何在docker集装箱中使用matplotlib.pyplot?
- ImportError:导入Docker SDK for Python时,没有名为ssl_match_hostname的模块
- 将Docker容器重置/恢复到原始图像状态的最佳方法
- 命令'/ bin / sh -c sudo pip3 install -r requirements.txt'返回一个非零的代码:1