Как использовать команду docker container port для просмотра сопоставлений портов

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь использовать команду docker port для проверки сопоставления портов работающего контейнера Docker. Мы начнём с запуска контейнера Nginx с опубликованными портами, а затем изучим, как вывести список всех сопоставлений опубликованных портов для контейнера.

Вы также узнаете, как вывести список конкретных сопоставлений портов TCP и UDP, и поймёте поведение при запросе несуществующего сопоставления UDP. В заключение мы продемонстрируем, как вывести конкретное сопоставление опубликованного порта без явного указания протокола.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555116{{"Как использовать команду docker container port для просмотра сопоставлений портов"}} docker/ps -.-> lab-555116{{"Как использовать команду docker container port для просмотра сопоставлений портов"}} docker/port -.-> lab-555116{{"Как использовать команду docker container port для просмотра сопоставлений портов"}} docker/pull -.-> lab-555116{{"Как использовать команду docker container port для просмотра сопоставлений портов"}} docker/images -.-> lab-555116{{"Как использовать команду docker container port для просмотра сопоставлений портов"}} end

Запуск контейнера с опубликованными портами

На этом шаге мы научимся запускать Docker-контейнер и публиковать его порты на хостовой машине. Публикация портов позволяет получить внешний доступ к сервисам, работающим внутри контейнера.

Сначала загрузим образ nginx из Docker Hub. Этот образ содержит простой веб-сервер, который мы будем использовать для демонстрации.

docker pull nginx

Вы увидите вывод, указывающий на загрузку образа. После завершения загрузки можно проверить наличие образа локально, выполнив:

docker images

Теперь запустим контейнер nginx и опубликуем порт 80 внутри контейнера на порт 8080 хостовой машины. Флаг -d запускает контейнер в detached mode (в фоновом режиме), флаг -p сопоставляет порты, а nginx — это имя образа.

docker run -d -p 8080:80 nginx

В выводе будет указан ID контейнера. Это означает, что контейнер успешно запущен, и его внутренний порт 80 доступен через порт 8080 на вашей LabEx VM.

Чтобы убедиться, что веб-сервер работает и доступен, можно использовать curl для обращения к опубликованному порту на хостовой машине.

curl http://localhost:8080

В терминале вы увидите HTML-код стандартной приветственной страницы Nginx. Это подтверждает, что сопоставление портов работает корректно, и вы можете получить доступ к сервису внутри контейнера с хоста.

Просмотр всех опубликованных портов контейнера

На этом шаге мы научимся просматривать опубликованные порты работающего Docker-контейнера. Это полезно для проверки, какие порты открыты и как они сопоставлены с хостом.

Мы можем использовать команду docker port с указанием ID или имени контейнера, чтобы вывести список всех опубликованных портов. Сначала получим ID контейнера nginx, который мы запустили ранее.

docker ps -q --filter ancestor=nginx

Эта команда выведет ID контейнера. Скопируйте этот ID, так как он понадобится для следующей команды.

Теперь используйте команду docker port с ID контейнера для просмотра сопоставления портов. Замените <container_id> на фактический ID, который вы получили.

docker port <container_id>

Вы должны увидеть вывод вида 80/tcp -> 0.0.0.0:8080. Это означает, что внутренний порт 80 контейнера (по протоколу TCP) сопоставлен с портом 8080 на всех интерфейсах хоста (0.0.0.0).

Эта команда предоставляет быстрый способ просмотра всех настроенных сопоставлений портов для работающего контейнера.

Просмотр конкретного опубликованного TCP-порта

На этом шаге мы уточним использование команды docker port для просмотра конкретного опубликованного порта с указанием протокола. Это полезно, когда контейнер предоставляет доступ к нескольким портам с разными протоколами.

Чтобы просмотреть конкретный опубликованный TCP-порт, мы добавляем номер порта контейнера и протокол (/tcp) к команде docker port. Сначала снова получим ID контейнера, если он не сохранён.

docker ps -q --filter ancestor=nginx

Теперь используем команду docker port с ID контейнера, указав внутренний порт 80 с протоколом TCP. Замените <container_id> на ваш ID контейнера.

docker port < container_id > 80/tcp

Вывод должен быть 0.0.0.0:8080. Это точно показывает адрес хоста и порт, на который сопоставлен внутренний TCP-порт 80 контейнера. Такой подход более точен, чем вывод всех портов, если вас интересует только конкретное сопоставление и протокол.

Просмотр конкретного опубликованного UDP-порта (ожидаем ошибку)

На этом шаге мы попытаемся просмотреть конкретный опубликованный UDP-порт для нашего контейнера nginx. Поскольку Nginx обычно использует только TCP для веб-сервера, мы ожидаем, что эта команда не найдёт UDP-сопоставления и может вернуть ошибку или пустой вывод. Это демонстрирует, как указывать протокол при запросе сопоставлений портов и что происходит, когда сопоставление для этого протокола не существует.

Сначала получим ID вашего контейнера nginx.

docker ps -q --filter ancestor=nginx

Теперь используем команду docker port с ID контейнера, указав внутренний порт 80 с протоколом UDP (/udp). Замените <container_id> на ваш ID контейнера.

docker port < container_id > 80/udp

Вы должны увидеть, что команда не выводит ничего или возвращает сообщение об ошибке. Это происходит потому, что контейнер nginx в стандартной конфигурации не открывает порт 80 по протоколу UDP. Это подчёркивает важность указания правильного протокола при запросе сопоставлений портов.

Просмотр опубликованного сопоставления портов без указания протокола

На этом шаге мы научимся просматривать конкретное опубликованное сопоставление портов без явного указания протокола (TCP или UDP). Когда протокол не указан, команда docker port выведет сопоставления для обоих протоколов по указанному порту контейнера.

Сначала получим ID вашего контейнера nginx.

docker ps -q --filter ancestor=nginx

Теперь используем команду docker port с ID контейнера, указав внутренний порт 80 без протокола. Замените <container_id> на ваш ID контейнера.

docker port < container_id > 80

Поскольку наш контейнер nginx имеет только TCP-сопоставление для порта 80, вывод будет 80/tcp -> 0.0.0.0:8080. Если бы контейнер имел сопоставления и для TCP, и для UDP по порту 80, были бы выведены оба. Это удобный способ увидеть все сопоставления для конкретного внутреннего порта, независимо от протокола.

Итоги

В этой лабораторной работе мы научились запускать Docker-контейнер и публиковать его внутренние порты на хостовой машине с помощью команды docker run -p. Мы продемонстрировали это, запустив контейнер Nginx и сопоставив его внутренний порт 80 с портом 8080 на хосте, проверив доступность с помощью curl.

Затем мы изучили команду docker port для просмотра опубликованных сопоставлений портов работающего контейнера. Мы узнали, как вывести список всех опубликованных портов и как запрашивать конкретные сопоставления TCP- или UDP-портов, поняв, что запрос несуществующего UDP-сопоставления приведёт к ошибке. Также мы попрактиковались в просмотре конкретного сопоставления портов без явного указания протокола.