web/env.gunicorn
来存储我的Gunicorn启动配置。该文件包含GUNICORN_CMD_ARGS="--bind=127.0.0.1:8001 --workers=3"
问题是,
GUNICORN_CMD_ARGS
在管道中的某处未正确处理。我在运行docker logs gunicorn
时遇到的错误是Error: '8001 --workers=3' is not a valid port number.
问题是,在我的设置中哪里的假设是错误的,从而导致环境变量被破坏?在终端中手动运行时,将接受环境变量。 docker撰写文件如下所示
version: "3"
services:
# nginx:
# image: nginx:latest
# ports:
# - "80:80"
# volumes:
# - ./nginx:/etc/nginx/conf.d
# depends_on:
# - web
web:
build: ./web
container_name: gunicorn
ports:
- "8001:8001"
environment:
- APP_CONFIG_FILE=../config/development.py
env_file:
- 'web/env.gunicorn'
networks:
- backend
command: gunicorn thymedata:app
depends_on:
- influxdb
- grafana
influxdb:
image: influxdb:latest
container_name: influxdb
ports:
- "8086:8086"
env_file:
- 'influxdb/env.influxdb'
- 'influxdb/secrets.influxdb'
networks:
- backend
volumes:
- influxdb-data:/var/lib/influxdb
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
env_file:
- 'grafana/env.grafana'
- 'grafana/secrets.grafana'
networks:
- backend
volumes:
- grafana-data:/var/lib/grafana
depends_on:
- influxdb
networks:
backend:
volumes:
influxdb-data:
grafana-data:
#1 楼
阅读命令章节并找到此示例后,可以通过直接传递参数来忽略自定义GUNICORN_CMD_ARGS
:command: gunicorn thymedata:app --bind=127.0.0.1:8001 --workers=3
如果真的想使用变量,则可以按照以下步骤进行操作:
command: gunicorn thymedata:app --bind=${GUNICORN_BIND_ADDRESS} --workers=${GUNICORN_WORKERS}
.env
GUNICORN_BIND_ADDRESS=127.0.0.1:8001
GUNICORN_WORKERS=3
评论
$ {GUNICORN_BIND_ADDRESS}将仅评估终端中已存在的变量,而没有通过env_file加载的变量。由于我没有设置任何秘密,因此这是可以接受的解决方案
–莫里茨
17年12月31日在9:25
#2 楼
我有一个类似的问题,这对我有用,而没有感觉像是被黑客入侵...docker-compose.yml:
version: '3'
services:
web:
build .
environment:
- GUNICORN_CMD_ARGS=--workers=0 --bind=0.0.0.0:8000 --timeout=10
注意:添加不带引号的env GUNICORN_CMD_ARGS
Dockerfile:
FROM python:3.6-slim
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
ENV GUNICORN_CMD_ARGS="--bind=0.0.0.0:8000 --workers=3"
CMD gunicorn app:app
注意:运行CMD gunicorn app:app无需通过数组或引号传递选项
#3 楼
在使用docker-compose的环境文件遇到此问题时,我发现问题出在引号中。如果将
GUNICORN_CMD_ARGS=--bind=127.0.0.1:8001 --workers=3
放在.env文件中,则参数被接受而没有任何问题,但是如果我将用引号引起来的变量被docker-compose破坏。
评论
不是使用gunicorn,而是在阅读文档时,在env变量的注释处没有=符号。我会尝试使用空格,但是听起来好像它不能正确解析倍数参数,因此这可能是gunicorn中的一个错误(将参数顺序颠倒为bind参数结尾可能是一种解决方法,或者显示为带有分割问题workers参数)我尝试更改参数的顺序,但这没有帮助。我还尝试从命令行设置GUNICORN_CMD_ARGS来启动Gunicorn,它已经正确接受了(检查了工人数量和地址)。这就是为什么我认为问题出在Docker方面。
错误:构建路径/ home / ben / devopsStackExchange / web不存在,不可访问或不是有效的URL。请创建一个步骤来重现该段落并添加所需的文件,以便其他人可以通过提供帮助至少允许他们重现问题。
请至少添加Gunicorn Dockerfile。
我不使用Gunicorn Dockerfile。我会坚持使用以下命令:gunicorn thymedata:app --bind = 127.0.0.1:8001 --workers = 3版本,因为不接受通过env_file加载的变量。它们必须已经在呼叫终端中设置。