Mom*_*omo 10 docker dockerfile
我的Dockerfile为环境变量设置了一些默认值,然后公开了两个应该是提供的环境变量的端口:
FROM python:3.6.5-stretch
[ ... ]
ENV MY_SERVICE_PORT 8080
ENV MY_SERVICE_PORT_RPC 50051
[ ... ]
EXPOSE ${MY_SERVICE_PORT}
EXPOSE ${MY_SERVICE_PORT_RPC}
Run Code Online (Sandbox Code Playgroud)
容器内的应用程序在启动容器时正确读取环境变量.如果我使用以下方式运行图像:
docker run -e "MY_SERVICE_PORT=80" -d -t image_tag
Run Code Online (Sandbox Code Playgroud)
然后我用docker ps:
0fb14e12d43d image_tag "/bin/sh -c 'python3…" 8080/tcp, 50051/tcp
Run Code Online (Sandbox Code Playgroud)
如您所见,EXPOSE使用构建时环境变量(默认为8080和50051).如果我set在集装箱码头内执行,我得到:
MY_SERVICE_PORT=80
MY_SERVICE_PORT_RPC=50051
Run Code Online (Sandbox Code Playgroud)
如何确保EXPOSE仅设置为运行时环境变量?可能吗?
如果您不确定暴露的端口是什么,请不要在dockerfile中设置它们。只需在运行时与环境变量一起使用--exposewith docker run即可指定端口,以获取详细信息:
https://docs.docker.com/engine/reference/run/#expose-incoming-ports
有点晚了,但是您也可以使用build args并将代码更改为:
FROM python:3.6.5-stretch
[ ... ]
ARG MY_SERVICE_PORT=8080
ARG MY_SERVICE_PORT_RPC=50051
# 8080 and 50051 would be the defaults
[ ... ]
# Still functions like environment variables :)
EXPOSE ${MY_SERVICE_PORT}
EXPOSE ${MY_SERVICE_PORT_RPC}
Run Code Online (Sandbox Code Playgroud)
然后,您可以docker build --build-arg MY_SERVICE_PORT=80 -t image_tag
在运行之前进行构建。这样,您可以使容器化的应用程序和容器在相同的端口上运行,而不会变得太复杂。
| 归档时间: |
|
| 查看次数: |
8110 次 |
| 最近记录: |