@docker_ru
Docker — русскоговорящее сообщество

Обсуждаем вопросы, посвященные Docker🐳, Docker Swarm и всей экосистеме. Обмениваем идеями, новостями и решаем пробемы. Вам могут быть полезны: @coreos_ru, @kubernetes_ru, @devops_ru, @rkt_ru Рекомендуем сразу отключить уведомления для удобства

2608 members

Архив канала @docker_ru 27 марта 2017 г.

06:02:25 ДП
User 186245040
Приветы. Хочу вывести в переменную в баше порт , который прокидывается в контейнер(с постгресом в моём случае). Если IP контейнера я легко достал, отформатировав вывод docker inspect, то с портом проблема.
06:02:39 ДП
User 186245040
export POSTGRES_CONTAINER_IP=$(docker inspect —format '{{ .NetworkSettings.IPAddress }}' $(docker ps —format "{{ .ID }}" —filter 'name'="$POSTGRES_CONTAINER_NAME"))
export POSTGRES_CONTAINER_PORT=$(docker inspect —format '{{ .NetworkSettings.Ports."5432/tcp".HostPort }}' $(docker ps —format "{{ .ID }}" —filter 'name'="$POSTGRES_CONTAINER_NAME"))
06:03:02 ДП
User 186245040
собственно, ругается на 5432/tcp
08:04:50 ДП
User 199194369
то есть ты не знаешь какой порт будет?
08:04:55 ДП
User 199194369
открывай все порты
08:05:18 ДП
User 199194369
предлагаю прописать портянку из EXPOSE 1 ... EXPOSE 65535
08:05:27 ДП
User 199194369
гарантированно даст все порты
08:05:34 ДП
User 123648726
докер умеет открывать рейндж портов
08:05:51 ДП
User 199194369
да-да, но портянка рулит)
08:05:57 ДП
User 123648726
а задачу попонятнее еще раз можно? Ssi
08:06:08 ДП
User 123648726
честно говоря не понял, что ты хочешь
08:06:51 ДП
User 123648726
у докера кажется даже есть опция -P, которая маппит все порты
08:06:54 ДП
User 123648726
без рейнджа
08:07:04 ДП
User 186245040
User 199194369
то есть ты не знаешь какой порт будет?
да. делаю docker -P run
08:07:59 ДП
User 199194369
как бы звучит уже странно
08:08:15 ДП
User 199194369
запускать сервис в докере с рандомным портом
08:08:22 ДП
User 186245040
на самом деле, я нашёл решение, но спасибо :)
08:08:34 ДП
User 186245040
export POSTGRES_CONTAINER_PORT=$(docker inspect —format '{{(index (index .NetworkSettings.Ports "5432/tcp") 0).HostPort}}' $(docker ps —format "{{ .ID }}" —filter 'name'="$POSTGRES_CONTAINER_NAME"))
08:08:56 ДП
User 186245040
вопрос был в том, как бы так пофильтровать, что вернулся порт
08:09:55 ДП
User 199194369
а что за задача стояла?
08:10:42 ДП
User 186245040
вставить порт в переменную окружени
08:11:02 ДП
User 186245040
чтоб потом из приложения его прочитать.
08:11:11 ДП
User 186245040
сильно костыльно? )
08:29:10 ДП
User 199194369
если докеру сказать просто порт, мне кажется он сам сопоставит рандомный порт из контейнера на выставленный наружу
08:29:37 ДП
User 199194369
это более предсказуемо и более прозрачно для фаервола иметь зафиксированный порт
11:20:12 ДП
User 197902193
User 186245040
сильно костыльно? )
очень :) Обычно для этого используют сервис-дискавери. Consul, etcd, zookeeper... или польщуеются дискавери механизмами swarm/kubernetes, если они используются.