Поиск по сайту:
Люди легко верят тому, чего страстно желают (Ф. Вольтер).

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

04.12.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. Вы можете использовать эти имена, чтобы проверить, могут ли контейнеры взаимодействовать друг с другом или нет. Это может стать очень полезным при поиске и устранении неисправностей.

Читать  Как настроить серверные блоки Nginx в Ubuntu 22.04

Сначала установите 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

 

Как вы можете видеть выше, обратный прокси-контейнер «видит» второй 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

 

Читать  Как выйти из контейнера Docker

Обратите внимание, что мы явно добавили 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

 

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

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

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Собираются планы по увеличению производства до 20 процентов передовых чипов…

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

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