Поиск по сайту:

Настоящее горе стыдливо (Ф. Геббель).

Настройка имени хоста в Docker Compose

3 мин для чтения
FavoriteLoadingДобавить в избранное
4 декабря 2021
Как установить и использовать Docker Compose в Debian 10 Linux
Из этого быстрого совета по Docker вы узнаете, как установить имя хоста для вашего контейнера с помощью Docker Compose.
Не знаете, как установить имя хоста в Docker Compose? Мы вам это покажем.

Вы можете определить его в рамках службы следующим образом:

...
letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    hostname: ledocker
    ...

 

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

Точно так же основная цель здесь — гарантировать, что контейнеры могут успешно взаимодействовать друг с другом в сети Docker.

Мы собираемся обсудить два способа сделать это возможным:

 

Метод 1: неявное общение

В сети Docker имена служб, определенные в файле Docker Compose, можно использовать для проверки того, могут ли контейнеры взаимодействовать друг с другом.

Возьмем, к примеру, следующую конфигурацию обратного прокси :

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    env_file:
      - ./letsencrypt.env
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

 

Обратите внимание, что это два имени службы nginx-proxy и letsencrypt. Вы можете использовать эти имена, чтобы проверить, могут ли контейнеры взаимодействовать друг с другом или нет. Это может стать очень полезным при поиске и устранении неисправностей.

Сначала установите ping внутри контейнера обратного прокси Nginx :

andreyex@destr-desktop:~/nginx-proxy$ docker-compose exec nginx-proxy bash -c "apt update && apt install -y iputils-ping"

 

Теперь вы можете использовать команду ping внутри этого контейнера, чтобы проверить, может ли он взаимодействовать с контейнером Let’s Encrypt (используется для SSL).

andreyex@destr-desktop:~/nginx-proxy$ sudo docker-compose exec nginx-proxy ping letsencrypt
PING letsencrypt (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms
^C
--- letsencrypt ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 37ms

 

Читать  Размещайте несколько сайтов на одном VPS с помощью Docker и Nginx

Как вы можете видеть выше, обратный прокси-контейнер «видит» второй SSL-контейнер, который отправляет ответ обратно! В nginx-proxy_letsencrypt_1.net, nginx-proxy_letsencrypt_1 это имя SSL контейнера и net наша обычная сеть.

Давайте быстро это проверим:

andreyex@destr-desktop:~/nginx-proxy$ sudo docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS         PORTS     NAMES
a9ef56e22f58   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   7 minutes ago   Up 7 minutes             nginx-proxy_letsencrypt_1
563133f5d039   jwilder/nginx-proxy                      "/app/docker-entrypo…"   7 minutes ago   Up 7 minutes             nginx-proxy_nginx-proxy_1

 

Чтобы проверить сеть, вы можете использовать команду docker network ls.

andreyex@destr-desktop:~/nginx-proxy$ sudo docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
018c50dc4fdc   bridge              bridge    local
27fd2370e735   net                 bridge    local
38ce8d11227b   host                host      local
2440210d0fc5   none                null      local

 

Метод 2: явное общение

Скажем, по какой-то причине вы хотите явно указать имя хоста для контейнера. Docker Compose тоже позволяет это делать!

Используя параметр конфигурации hostname, вы можете установить другое имя хоста для любой службы, определенной в файле Docker Compose, как я сделал для службы Let’s Encrypt ниже:

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    hostname: ledocker
    env_file:
      - ./letsencrypt.env
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

 

Обратите внимание, что мы явно добавили hostname: ledocker в определение сервиса Let’s Encrypt. Мы хотим использовать в качестве имени хоста ledocker для контейнера SSL.

Но подождите, можем ли мы еще раз перепроверить с помощью команды ping?

andreyex@destr-desktop:~/nextcloud$ sudo docker-compose exec nginx-proxy ping ledocker
PING ledocker (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.079 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=3 ttl=64 time=0.061 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=4 ttl=64 time=0.093 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=5 ttl=64 time=0.078 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=6 ttl=64 time=0.075 ms
^C
--- ledocker ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 129ms
rtt min/avg/max/mdev = 0.034/0.070/0.093/0.018 ms

 

Читать  Использование Docker для настройки обратного прокси Nginx с автоматической генерацией SSL

Определенно да. Оно работает!

Надеемся, вам понравился этот быстрый совет! Вы можете оставить любые вопросы, сомнения или предложения в разделе комментариев ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:
5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close