Docker EXPOSE с использованием переменных среды выполнения - PullRequest
0 голосов
/ 04 мая 2018

Мой 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}

Мое приложение внутри контейнера правильно читает переменную среды при запуске контейнера. Если я запускаю свое изображение, используя:

docker run -e "MY_SERVICE_PORT=80" -d -t image_tag

Тогда я использую docker ps:

0fb14e12d43d    image_tag    "/bin/sh -c 'python3…"   8080/tcp, 50051/tcp

Как видите, EXPOSE использовал переменные среды времени сборки (по умолчанию 8080 и 50051). Если я выполню set внутри контейнерного терминала, я получу:

MY_SERVICE_PORT=80
MY_SERVICE_PORT_RPC=50051

Как я могу убедиться, что для EXPOSE установлена ​​только переменная среды выполнения? Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 25 июля 2019

Немного поздно, но вы также можете использовать аргументы сборки и изменить код на:

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}

Тогда вы можете построить с docker build --build-arg MY_SERVICE_PORT=80 -t image_tag прежде чем бежать Таким образом, вы можете запустить приложение в контейнере и контейнер с одинаковыми портами, не усложняя его.

0 голосов
/ 04 мая 2018

Если вы не уверены, какими будут ваши открытые порты, не устанавливайте их в файле Docker. Просто используйте --expose с docker run, чтобы указать порты во время выполнения вместе с переменной среды для деталей:

https://docs.docker.com/engine/reference/run/#expose-incoming-ports

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...