当任何文件发生更改时,在 Docker 容器中重新启动 Python 脚本
Posted
技术标签:
【中文标题】当任何文件发生更改时,在 Docker 容器中重新启动 Python 脚本【英文标题】:Restart Python script inside Docker container when any file has changes 【发布时间】:2020-12-26 06:51:46 【问题描述】:我有一个简单的脚本,比如
print('hey 01')
我已将其 dockerized 如下所示:
FROM python:3.8
WORKDIR /crawler_app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "-u", "boot_up.py"]
我还有一个如下的撰写文件:
version: "3.7"
services:
db:
image: mongo:latest
container_name: $DB_CONTAINER_NAME
volumes:
- ./mongo-volume:/data/db
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: $MONGO_USER
MONGO_INITDB_ROOT_PASSWORD: $MONGO_USER_PASS
ports:
- $EXPOSED_PORT:27017
networks:
- crawl-network
crawler:
build: crawler
container_name: $CRAWLER_APP_NAME
restart: always
volumes:
- ./crawler:/crawler_app
networks:
- crawl-network
depends_on:
- db
networks:
crawl-network:
问题
问题是,虽然我的 Docker 容器中有一个卷,并且当我在编辑器中更改代码并保存它时,容器内的源代码会更新,但无法重新启动 Python 脚本以开始新的更新代码。
我已经搜索了很多关于这个问题的内容,我在 GitHub 和 Stack Overflow 上找到了一些线程,但没有一个对我没有用,我也没有得到他们的答案。
我的主要问题是,如何在更改源代码并保存时重新启动容器内的 Python 脚本?
我找到了一种方法,每次都提到要重启你的容器,但我认为应该有一个简单的方法,比如 nodemon 到 javascript。
【问题讨论】:
这能回答你的问题吗? How do i watch python source code files and restart when i save?. 我已经读到,当我遇到问题时,它有点帮助,但它不是正确的方式,因为我想用 python 方式,而不是用 nodemon 的 js 方式!,我想要我的容器没有任何额外的东西,比如 npm 能够运行npm install nodemon
,我想要它在纯 python 中!
第三个答案使用来自 pip 的watchdog
我在我的 Docker 文件 CMD ["watchmedo", "shell-command", "--patterns='*.py'", "--command='python -u \"boot_up.py\"'", "."]
中使用了这个命令,它给了我这个错误 Traceback (most recent call last): File "/usr/local/bin/watchmedo", line 5, in <module> from watchdog.watchmedo import main File "/usr/local/lib/python3.8/site-packages/watchdog/watchmedo.py", line 27, in <module> import yaml ModuleNotFoundError: No module named 'yaml'
实际上,我认为您需要pip install watchdog[watchmedo]
才能获得额外的部门。
【参考方案1】:
如果你想使用 watchmedo,你需要安装库来通过命令解析 yaml 文件
python -m pip install pyyaml
【讨论】:
以上是关于当任何文件发生更改时,在 Docker 容器中重新启动 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章
当 docker 容器内的数据发生变化时,Create-react-app 服务器不会重新编译