首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有"--reload“和Docker卷的Hypercorn

具有"--reload“和Docker卷的Hypercorn
EN

Stack Overflow用户
提问于 2021-05-12 23:14:57
回答 1查看 467关注 0票数 0

我在Docker容器中运行带有--reload的Hypercorn。我正在运行的文件保存在由Docker Compose管理的卷中。

当我在我的系统上更改文件时,我可以看到更改反映在卷中,例如使用docker compose exec myapp /bin/cat /app/runtime/service.py

但是,当我以这种方式更改文件时,Hypercorn不会像我预期的那样重新启动。超玉米和Docker音量之间是否存在一些不利的交互作用?或者,我是否期望从--reload选项中获得一些我不应该期望的东西?

示例文件如下。我的预期是,从容器外部修改runtime/service.py会触发Hypercorn使用修改后的文件版本重新启动服务器。但这并没有发生。

编辑:我应该补充说,我在MacOS 10.14.6上通过Docker Desktop for Mac使用Docker 20.10.5。

编辑2:这可能是一个超级玉米bug。如果我在requirements.txt中添加uvicorn[standard]并运行python -m uvicorn --reload --host 0.0.0.0 --port 8001 service:app,则重新加载工作正常。可能相关:https://gitlab.com/pgjones/hypercorn/-/issues/185

entrypoint.sh

代码语言:javascript
复制
#!/bin/sh
cd /app/runtime
/opt/venv/bin/python -m hypercorn --reload --bind 0.0.0.0:8001 service:app

Dockerfile

代码语言:javascript
复制
FROM $REDACTED

RUN /opt/venv/bin/python -m pip install -U pip
RUN /opt/venv/bin/pip install -U setuptools wheel

COPY requirements.txt /app/requirements.txt
RUN /opt/venv/bin/pip install -r /app/requirements.txt

COPY requirements-dev.txt /app/requirements-dev.txt
RUN /opt/venv/bin/pip install -r /app/requirements-dev.txt

COPY entrypoint.sh /app/entrypoint.sh

EXPOSE 8001/tcp

CMD ["/app/entrypoint.sh"]

docker-compose.yml

代码语言:javascript
复制
version: "3.8"
services:
  api:
    container_name: api
    hostname: myapp
    build:
      context: .
    ports:
      - 8001:8001
    volumes:
      - ./runtime:/app/runtime

runtime/service.py

代码语言:javascript
复制
import logging
import quart

logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)

app = quart.Quart(__name__)

@app.route('/')
async def handle_hello():
    logger.info('Handling request.')
    return 'Hello, world!\n'

@app.route('/bad')
async def handle_bad():
    logger.critical('Bad request.........')
    raise RuntimeError('Oh no!!!')
EN

回答 1

Stack Overflow用户

发布于 2021-05-12 23:20:08

您可能需要使用volume mount来获得重新加载功能!

这是因为当您构建容器时,它会将您在本地拥有的任何内容都烘焙到其中。进一步的更改只会影响本地文件系统。

这可以说不是预期的用途(因为容器变得依赖于外部文件!),但可能对更快的测试/调试很有用

您还可以通过连接到容器来直接编辑容器,这可能适合您的需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67506424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档