Docker 如何在基于Alpine的图像上使用CMD中的ENV变量?

Docker 如何在基于Alpine的图像上使用CMD中的ENV变量?,docker,dockerfile,Docker,Dockerfile,我尝试了几种不同的方法来获取CMD语句中的WORKERS变量,但它们似乎都不起作用。基于Alpine的容器在语法和用法上似乎也非常挑剔。任何帮助都将不胜感激 Dockerfile ENV WORKERS=2 EXPOSE 5000 CMD ["/usr/local/bin/gunicorn", "-b 0.0.0.0:5000", "-w ${WORKERS}", "app:app"] 显然,Alpine不会从子shell运行应用程序,遵循此模式将允许它正常工作 ENV WORKERS=2

我尝试了几种不同的方法来获取
CMD
语句中的
WORKERS
变量,但它们似乎都不起作用。基于Alpine的容器在语法和用法上似乎也非常挑剔。任何帮助都将不胜感激

Dockerfile

ENV WORKERS=2

EXPOSE 5000

CMD ["/usr/local/bin/gunicorn", "-b 0.0.0.0:5000", "-w ${WORKERS}", "app:app"]

显然,Alpine不会从子shell运行应用程序,遵循此模式将允许它正常工作

ENV WORKERS=2
ENV WORKER_TIMEOUT=60

EXPOSE 5000

CMD ["/bin/sh", "-c", "/usr/local/bin/gunicorn \
     -b 0.0.0.0:5000 -w ${WORKERS} -t ${WORKER_TIMEOUT} app:app"]

这是默认的docker行为,不应该与alpine相关。我从来没有在命令之前显式使用过
/bin/sh-c
,但我通常使用基于Debian的图像。@atamanroman是正确的。如果使用字符串形式
CMD
ENTRYPOINT
,则不需要添加shell,因为docker会自动添加shell。因为您使用的是json数组表单,所以必须自己添加
sh
。这与Nepin无关,但是环境变量不会计算。