首页 > 解决方案 > 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

标签: docker

解决方案


问题是你没有给-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

它将输出容器内工作目录的内容。


推荐阅读