Просмотр и управление сетевыми подключениями, установленными контейнером Docker.
Зачастую при работе с контейнером Docker нам нужно смотреть на сетевые подключения, используемые контейнером для начальной отладки или устранения неполадок.
Возможно, вы захотите увидеть, какой IP-адрес прослушивает порт или сколько соединений в настоящее время активно в контейнере.
Поскольку Docker – это изолированная среда, запуск netstat на сервере не предоставит вам сетевых подключений контейнера.
Вместо этого вам нужно либо попасть внутрь контейнера, чтобы запустить netstat, либо запустить его удаленно.
Рассмотрим оба варианта!
# 1. Вход во внутрь контейнера Docker для запуска netstat
В качестве первого шага найдите идентификатор контейнера, который вы хотите устранить.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ce7cfb9be37 nginx "/docker-entrypoint.…" 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp web-server
4ab8551671d7 nginx "/docker-entrypoint.…" 6 minutes ago Up 6 minutes 80/tcp vigilant_ganguly
$
В этом примере я хочу устранить проблему с контейнером с идентификатором 0ce7cfb9be37.
Теперь, чтобы получить сеанс оболочки (bash) этого контейнера, используйте:
$ docker exec -it 0ce7cfb9be37 bash
Это должно привести к появлению приглашения bash внутри контейнера.
Вы можете установить пакет netstat для поиска установленных сетевых подключений.
По умолчанию эти утилиты могут быть недоступны внутри контейнера.
Итак, чтобы установить его, используйте:
apt update
apt install net-tools
Теперь мы можем использовать команду netstat как обычно.
Пример вывода:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 172.17.0.3:80 223.233.99.46:64429 FIN_WAIT2
tcp 0 0 172.17.0.3:80 223.233.99.46:4811 ESTABLISHED
tcp 0 0 172.17.0.3:80 223.233.99.46:64430 FIN_WAIT2
tcp 0 0 172.17.0.3:80 223.233.99.46:4810 ESTABLISHED
tcp6 0 0 :::80 :::* LISTEN
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] STREAM CONNECTED 35748
unix 3 [ ] STREAM CONNECTED 35749
# 2. Как запустить netstat, не заходя внутрь контейнера.
Первым делом нам нужно получить идентификатор контейнера с помощью команды docker ps.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5db9a01d4a8 postgres:13.1-alpine "docker-entrypoint.s…" 9 days ago Up 9 days 0.0.0.0:5432->5432/tcp relicflare_server_postgres
Затем запустите команду docker, как показано ниже, чтобы узнать все установленные соединения для контейнера.
В результате получится что-то вроде вывода ниже.
# docker exec e5db9a01d4a8 netstat | grep ESTABLISHED
tcp 0 0 e5db9a01d4a8:postgresql 161.35.XXX.XXX:49128 ESTABLISHED
udp 0 0 localhost:48818 localhost:48818 ESTABLISHED
Итак, идея состоит в том, чтобы запустить команду netstat вместе с командой docker exec.
Заключение
Теперь, когда у вас есть необходимые данные о подключении, вы можете продолжить устранение неполадок, просмотрев логи Docker и процессов.