【发布时间】: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。
【问题讨论】:
-
我已经读到,当我遇到问题时,它有点帮助,但它不是正确的方式,因为我想用 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]才能获得额外的部门。
标签: python python-3.x docker docker-compose dockerfile