docker - Docker:在运行时将自定义端口设置为环境变量,而不是构建
问题描述
泊坞窗文件
FROM flask:1.0
COPY ./ /app
WORKDIR /app
# install commands
RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y sudo
#RUN DEBIAN_FRONTEND=noninteractive apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y curl
#installing sql server odbc
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y apt-utils
#install python stuff
RUN pip3 install -r requirements.txt
ENTRYPOINT [ "python3" ]
#start server
ARG PORT=8004
ENV PORT=$PORT
#start server
EXPOSE ${PORT}
# RUN chmod +x src/entrypoint.sh
RUN chmod +x entrypoint.sh
# ENTRYPOINT [ "gunicorn", "-w", "4", "-b", "0.0.0.0:8004", "--chdir", "src", "wsgi:app" ]
ENTRYPOINT ["./entrypoint.sh"]
入口点文件
#!/bin/sh
gunicorn -w 4 -b 0.0.0.0:$PORT --chdir src wsgi:app
所以目前当我构建一个 docker 映像并在构建过程中传递端口值 8005 并随后使用 8005 运行它时,容器使用端口 8005 运行。
Create docker image:
docker build -t test:1.0 . --build-arg PORT=8005
Run docker container: docker run -p 8005:8005 -d test:1.0
但我需要在 RUN 期间而不是在构建期间传递端口(这不起作用并且它占用 8004)
Create docker image:
docker build -t test:1.0 .
Run: docker run -p 8005:8005 -d test:1.0 -e PORT=8005
解决方案
问题是你没有给-e port
命令docker run
,而是给容器中运行的任何东西。
以下应该工作,。
docker run -p 8005:8005 -d -e PORT=8005 test:1.0
例如,如果您运行:
docker run -p 8005:8005 -d -e PORT=8005 test:1.0 ls
它将输出容器内工作目录的内容。
推荐阅读
- c# - 通过本地和本地主机的 SQL 连接问题
- php - 如果 HTTP 是无状态的,PHP 如何知道窗口何时关闭(用于会话终止)
- facebook - Facebook 应用重新提交
- keyboard - eglfs:键盘没有被抓住
- css - 生成多个 CSS 包并在运行时仅导入必要的包的正确方法是什么?
- docker - Openshift:访问 openshift docker 注册表
- php - Explode() 不会在 PHP 中的指定字符处爆炸字符串
- r - 使用 data.table 中的列名选择多个列范围
- php - 在 MacOS High Sierra 上安装 xdebug
- javascript - Highlight 组件内的代码片段以单行长显示