LINUX.ORG.RU
ФорумAdmin

Что за порт в контейнере докера?

 


0

2

Есть два контейнера с nginx, в cont1 на 80 порту, в cont2 на 8080.

sudo docker ps -a
CONTAINER ID   IMAGE COMMAND                  CREATED             STATUS             PORTS                                                                                      
aaa5cb017bf6   cont1 "/docker-entrypoint.…"   35 minutes ago      Up 35 minutes      0.0.0.0:80->80/tcp, :::80->80/tcp
509babab488a   cont2 "/docker-entrypoint.…"   About an hour ago   Up About an hour   80/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp

Откуда у cont2 берётся 80/tcp и что это за порт, внешний или внутренний? Внешним он быть не может, потому что на 80 порту уже висит cont1. Внутренним он тоже не является, внутри контейнера на 80 порту никого нет.

/ # netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1/nginx: master pro
tcp        0      0 127.0.0.11:35285        0.0.0.0:*               LISTEN      -
udp        0      0 127.0.0.11:60959        0.0.0.0:*

Контейнеры запускаются через docker-compose, у первого порты 80:80, у второго 8080:8080.

Откуда у второго взялся 80 порт?

Ответ на: комментарий от cashalot

80й порт открыт в контейнере, но наружу не проброшен и доступен исключительно из сети контейнеров. У каждого контейнера свой ip-адрес и, соответственно, свой диапазон портов.

ComradeDOS
()
Последнее исправление: ComradeDOS (всего исправлений: 1)
Ответ на: комментарий от ComradeDOS

80й порт открыт в контейнере, но наружу не проброшен и доступен исключительно из сети контейнеров.

Кто его открыл и почему никто на 80 порту в контейнере не висит?

cashalot
() автор топика
Ответ на: комментарий от cashalot

Дефолтным конфигом, наверное. Если ты весь конфиг не заменил своим, то, скорее всего, там что-то дефолтное инклудится. Возможно это дефолтная страница nginx’а с фразой «It works!».

ComradeDOS
()
Последнее исправление: ComradeDOS (всего исправлений: 2)
Ответ на: комментарий от ComradeDOS

Дефолтным конфигом, наверное. Если ты весь конфиг не заменил своим, то, скорее всего, там что-то дефолтное инклудится.

Нет, в конфиге nginx второго контейнера listen 8080; Но кто бы его не открыл, почему его никто не слушает?

cashalot
() автор топика
Ответ на: комментарий от Nervous

nginx.conf

events{}

http {
  include /etc/nginx/mime.types;

  resolver 127.0.0.11 ipv6=off valid=10s;

  server {
    listen 8080;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.html;

    location / {
      try_files $uri $uri/ /index.html;
    }
  }
}

Dockerfile

FROM nginx:1.25.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf

docker-compose.yml

version: '3'
networks:
  ingress:
    name: XXXXXX
    external: true

services:
  client:
    image: YYYYYY
    container_name: cont2
    ports:
      - "8080:8080"
    networks:
      - ingress

cashalot
() автор топика
Ответ на: комментарий от cashalot

Возможно, выделенное стрелочкой (из одного из родительских докерфайлов) влияет. Моя докермагия недостаточно сильная в это время суток, чтобы быть уверенным.

$ docker history ng
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
0be007aa1e56   7 minutes ago   /bin/sh -c #(nop) COPY file:7fb4feba88637c09…   272B      
414132ff3b07   3 weeks ago     /bin/sh -c set -x     && apkArch="$(cat /etc…   29.6MB    
<missing>      3 weeks ago     /bin/sh -c #(nop)  ENV NJS_VERSION=0.7.12       0B        
<missing>      3 weeks ago     /bin/sh -c #(nop)  CMD ["nginx" "-g" "daemon…   0B        
<missing>      3 weeks ago     /bin/sh -c #(nop)  STOPSIGNAL SIGQUIT           0B        
<missing>      3 weeks ago     /bin/sh -c #(nop)  EXPOSE 80                    0B        <------------
<missing>      3 weeks ago     /bin/sh -c #(nop)  ENTRYPOINT ["/docker-entr…   0B        
<missing>      3 weeks ago     /bin/sh -c #(nop) COPY file:e57eef017a414ca7…   4.62kB    
<missing>      3 weeks ago     /bin/sh -c #(nop) COPY file:36429cfeeb299f99…   3.01kB    
<missing>      3 weeks ago     /bin/sh -c #(nop) COPY file:d4375883ed5db364…   276B      
<missing>      3 weeks ago     /bin/sh -c #(nop) COPY file:5c18272734349488…   2.12kB    
<missing>      3 weeks ago     /bin/sh -c #(nop) COPY file:7b307b62e82255f0…   1.62kB    
<missing>      3 weeks ago     /bin/sh -c set -x     && addgroup -g 101 -S …   4.74MB    
<missing>      3 weeks ago     /bin/sh -c #(nop)  ENV PKG_RELEASE=1            0B        
<missing>      3 weeks ago     /bin/sh -c #(nop)  ENV NGINX_VERSION=1.25.1     0B        
<missing>      3 weeks ago     /bin/sh -c #(nop)  LABEL maintainer=NGINX Do…   0B        
<missing>      3 weeks ago     /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B        
<missing>      3 weeks ago     /bin/sh -c #(nop) ADD file:6dd87346b8be240b2…   7.06MB 
Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Похоже, что так — добавил в докерфайл EXPOSE 8888, получил

c4f58adaa777  ng  "/docker-entrypoint.…"  8 seconds ago  Up 7 seconds  80/tcp, 8888/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp  cont2

Судя по документации, реально эти порты не биндятся без ключа -P, но docker ps их показывает все в кучу.

Вот что будет с -P:

$ docker run -d -P ng 
e363307f78043245ae78a4ad7b7421c30c5b5ac8b9643468105ea3f85a9f3099

$ docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS                                                                                  NAMES
e363307f7804   ng        "/docker-entrypoint.…"   2 seconds ago    Up 2 seconds                0.0.0.0:32769->80/tcp, :::32769->80/tcp, 0.0.0.0:32768->8888/tcp, :::32768->8888/tcp    upbeat_hoover

Набиндил EXPOSE’d порты в контейнере на случайные порты на хосте.

Хоть вкурил теперь, зачем этот EXPOSE нужен на самом деле. Век жыви — век учись.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 5)
Ответ на: комментарий от Nervous

docker ps их показывает все в кучу

podman себе такого не позволяет.

$ podman ps
CONTAINER ID  IMAGE                COMMAND               CREATED        STATUS            PORTS                   NAMES
3f66339d0ab9  localhost/ng:latest  nginx -g daemon o...  9 seconds ago  Up 9 seconds ago  0.0.0.0:8080->8080/tcp  cont2
Nervous ★★★★★
()