Docker:在运行时将自定义端口设置为环境变量,而不是在生成时
docker文件Docker:在运行时将自定义端口设置为环境变量,而不是在生成时,docker,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
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
但我需要在运行期间而不是在构建期间传递端口(这不起作用,需要8004)
问题是您没有将
-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
它将在容器内输出workdir的内容。何必麻烦呢?您可以选择您选择的主机端口(
-p
参数的左侧),以显示容器中的服务正在侦听的端口。因此,您可以执行-p 8004:8005
以在主机上的端口8004上公开服务,或者执行-p 1234:8005
以在主机上的端口1234上公开服务,等等。只需将容器配置本身保持静态。我必须更改docker文件中的任何内容吗@larsks你是说下面的工作?docker run-p 8004:8005-d test:1.0我的意思是,为了在您选择的主机端口上公开服务,您不需要更改容器配置。假设您的服务正在侦听容器中的端口8005,那么您在评论中发布的内容应该可以正常工作。
docker run -p 8005:8005 -d -e PORT=8005 test:1.0 ls