Docker сопоставления портов хост-контейнер или контейнер-хост? - PullRequest
0 голосов
/ 09 марта 2020

Я часто использую Docker сопоставления портов для сопоставления порта хоста с портом контейнера, т.е. трафик c, отправляемый на порт хоста, перенаправляется на порт контейнера.

Это можно увидеть как отображение портов между хостами и контроллерами.

Меня смущает то, что во многих статьях рассказывается о сопоставлении портов контейнеров с портами хоста, то есть об обратном сопоставлении.

Кроме того, docker ps перечисляет хост сопоставления портов-контейнер, в то время как docker port перечисляет сопоставления портов контейнер-хост:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
5526355f9c75        ubuntu:latest       "/bin/bash"              55 seconds ago      Up 54 seconds       127.0.0.1:4444->8080/tcp   angry_tharp

$ docker port angry_tharp
8080/tcp -> 127.0.0.1:4444

Почему все это путаница с направлением сопоставления портов? Являются ли сопоставления портов между хостами и контейнерами какими-либо другими формами сопоставлений портов или хостов?

Ответы [ 2 ]

1 голос
/ 09 марта 2020

A docker сопоставление портов предоставляет порт изнутри контейнера для хоста. Так что то, что вы называете «хост-контейнер», можно также сформулировать как «контейнер-хост»: это зависит от точки зрения.

Давайте представим, что мы сетевой пакет. При прибытии на хост, нас перенаправляют в контейнер. Это «хост-контейнер».

Но теперь давайте представим, что мы выполняем сервис внутри контейнера. Когда мы начнем, привязайтесь к порту контейнера, который привязан к хосту. Таким образом, «контейнер-хост».

Вы понимаете: это то же самое.

1 голос
/ 09 марта 2020

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

Docker показывает сопоставления портов по отношению к контейнеру, а docker ls / ps - по отношению к хосту. Почему? Не уверен, но это не меняет сопоставления.

Из их официальных документов, которые, как я лично считаю, имеют приоритет над любой неофициальной статьей:

Flag value  Description
-p 8080:80  Map TCP port 80 in the container to port 8080 on the Docker host.
-p 192.168.1.100:8080:80    Map TCP port 80 in the container to port 8080 on the Docker host for connections to host IP 192.168.1.100.
-p 8080:80/udp  Map UDP port 80 in the container to port 8080 on the Docker host.
-p 8080:80/tcp -p 8080:80/udp   Map TCP port 80 in the container to TCP port 8080 on the Docker host, and map UDP port 80 in the container to UDP port 8080 on the Docker host.

Они всегда упоминают сопоставления как хост -в-контейнер.

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