Intereting Posts
MariaDB Ошибка при выполнении 'postInstallation' Запуск приложения узла в качестве пользователя без root в докере Не удается найти объем данных Docker на хосте Почему все изменения, внесенные во время сборки Docker, не доступны во время выполнения? Есть ли способ установить параметры ssh при использовании док-машины в Windows? Как я могу получить «масштаб докеры-компоновки» для использования последнего изображения для любых созданных дополнительных экземпляров? Интеграция с Docker и Java IDE Docker 1.12 читает старую строку из «томов» yml-файла вместо новой Как подключить мой докер с помощью SSL в локальной сети (без домена)? Использование докера для создания исполняемого файла ржавчины для отдельной среды Можно ли пропустить команду FROM в многоэтапном файле докеров? docker-compose ECONNREFUSED для Postgres на узлеJS Kubernetes создает сервис в режиме развертывания + rbd, также тот же, что и для успешного использования в пространстве имен по умолчанию, не выполняется при нестандартном пространстве имен? Часы Consul с кривыми проверками консула Изменения перезагрузки Docker при перезапуске

Как я могу захватить открытый порт от проверки контейнера докеров?

Предполагая, что я запускаю контейнер докера со следующей командой

docker run -d --name my-container -p 1234 my-image 

и работает docker ps показывает привязку порта для этого изображения …

 80/tcp, 443 /tcp. 0.0.0.0:32768->1234/tcp 

Есть ли способ, с помощью которого я могу использовать docker inspect чтобы захватить порт, который назначен для сопоставления с 1234 (в данном случае 32768)?

Подобно разбору и захвату IP-адреса с помощью следующей команды …

 IP=$(docker inspect -f "{{ .Networksettings.IPAddress }} my-container) 

Я хочу иметь возможность сделать что-то похожее на следующее

 ASSIGNED_PORT=$(docker inspect -f "{{...}} my-container) 

Я не уверен, есть ли способ сделать это через Docker, но я бы предположил, что есть некоторая маска командной строки (grep, sed и т. Д.), Которая позволила бы мне сделать что-то подобное.

Когда я запускаю docker inspect my-container и смотрю на NetworkSettings … Я вижу следующее

 "NetworkSettings": { ... ... ... "Ports": { "1234/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "32768" } ], "443/tcp": null, "80/tcp": null }, ... ... }, 

В этом случае я бы хотел, чтобы он нашел HostPort, не говоря мне ничего о порте 1234 (он должен игнорировать 443 и 80 ниже) и вернуть 32768 .

Выполните команду: docker inspect --format="{{json .Config.ExposedPorts }}" src_python_1

Результат: {"8000/tcp":{}}

Доказательство (используя docker ps ):

 e5e917b59e15 src_python:latest "start-server" 22 hours ago Up 22 hours 0.0.0.0:8000->8000/tcp src_python_1 

В зависимости от вашего вкуса есть два хороших варианта: docker port my-container 1234 | grep -o [0-9]*$ docker port my-container 1234 | grep -o [0-9]*$ и docker inspect --format='{{(index (index .NetworkSettings.Ports "1234/tcp") 0).HostPort}}' my-container

Это непросто, как с ip-адресом, поскольку один контейнер может иметь несколько портов, некоторые из них открыты, а некоторые нет, но это получит его:

 sudo docker inspect name | grep HostPort | sort | uniq | grep -o [0-9]* 

Если отображается более одного порта, он будет отображаться на новой строке.

Я использовал как docker inspect <container> и docker inspect <container>| jq docker inspect <container>| jq для docker inspect <container>| jq портов.

В приведенном ниже примере я смотрю контейнер dsb-server и порт, который я ищу, это 8080 / tcp

 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 98b4bec33ba9 xxxxx:dsbv3 "./docker-entrypoint." 6 days ago Up 6 days 8009/tcp, 0.0.0.0:4848->4848/tcp, 8181/tcp, 0.0.0.0:9013->8080/tcp dsb-server 

разделять порты

 docker inspect dsb-server| jq -r '.[].NetworkSettings.Ports."8080/tcp"[].HostPort' 

9013

 docker inspect --format='{{(index (index .NetworkSettings.Ports "8080/tcp") 0).HostPort}}' 

9013