GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Festlegen des Hostnamens in Docker Compose

Sie fragen sich, wie Sie den Hostnamen in Docker Compose festlegen? Das zeige ich dir.

Sie können es unter dem Dienst wie folgt definieren:

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

Aber braucht man das wirklich? Das allgemeine Ziel des Hostnamens ist, dass Computer im Netzwerk einander kennen und somit untereinander kommunizieren.

Ebenso geht es hier vor allem darum sicherzustellen, dass Container innerhalb eines Docker-Netzwerks erfolgreich miteinander kommunizieren können.

Ich werde zwei Möglichkeiten diskutieren, wie dies möglich gemacht werden kann:

Methode 1:Nicht-explizite Kommunikation

Innerhalb eines Docker-Netzwerks können Dienstnamen, die in einer Docker-Compose-Datei definiert sind, verwendet werden, um zu testen, ob Container miteinander kommunizieren können.

Nehmen Sie zum Beispiel die folgende Reverse-Proxy-Konfiguration:

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

Beachten Sie, dass die beiden Dienstnamen nginx-proxy sind und letsencrypt . Mit diesen Namen können Sie testen, ob Container miteinander kommunizieren können oder nicht. Dies kann bei der Fehlersuche sehr hilfreich sein.

Installieren Sie zuerst ping im Nginx Reverse Proxy-Container:

[email protected]:~/nginx-proxy$ docker-compose exec nginx-proxy bash -c "apt update && apt install -y iputils-ping"

Jetzt können Sie den Ping-Befehl innerhalb dieses Containers verwenden, um zu prüfen, ob er mit dem Let's Encrypt-Container (verwendet für SSL) kommunizieren kann.

[email protected]:~/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

Wie Sie oben sehen können, „sieht“ der Reverse-Proxy-Container den zweiten SSL-Container, der eine Antwort zurücksendet! In nginx-proxy_letsencrypt_1.net , nginx-proxy_letsencrypt_1 ist der Name des SSL-Containers und net ist unser benutzerdefiniertes Netzwerk.

Lassen Sie es uns schnell überprüfen:

[email protected]:~/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

Um das Netzwerk zu überprüfen, können Sie das docker network ls verwenden Befehl.

[email protected]:~/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

Methode 2:Explizite Kommunikation

Angenommen, Sie möchten aus irgendeinem Grund explizit einen Hostnamen für einen Container angeben. Mit Docker Compose können Sie das auch!

Unter Verwendung des hostname Konfigurationsoption können Sie jedem Dienst, der in einer Docker-Compose-Datei definiert ist, einen anderen Hostnamen zuweisen, wie ich es unten für den Let's Encrypt-Dienst getan habe:

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

Beachten Sie hier, dass ich ausdrücklich hostname: ledocker hinzugefügt habe innerhalb der Dienstdefinition von Let's Encrypt. Ich möchte ledocker verwenden als Hostname für den SSL-Container.

Aber warten Sie, können wir es mit dem Ping-Befehl noch einmal überprüfen?

[email protected]:~/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

In der Tat, ja. Es funktioniert!

Hungrig nach mehr Wissen in dieser Hinsicht? Sehen Sie sich diesen äußerst informativen GitHub-Thread an.

Ich hoffe, Ihnen hat dieser schnelle Tipp gefallen! Sie können Fragen, Zweifel oder Vorschläge im Kommentarbereich unten hinterlassen.


Linux
  1. So verwenden Sie Docker Compose

  2. Was ist neu in Docker Compose v2?

  3. Eine Kurzanleitung zur Verwendung von Docker Compose

  4. Installieren Sie WordPress mit Docker Compose, Nginx, Apache mit SSL

  5. Docker Volume erstellen Berechtigungen Linux

Von Docker Compose zu Kubernetes mit Podman

So installieren Sie Docker Compose auf Debian 9 Stretch

So installieren Sie Docker Compose unter CentOS 7

So installieren Sie Docker Compose auf Ubuntu

Docker File vs. Docker Compose:Was ist der Unterschied?

Installieren und verwenden Sie Docker Compose mit Docker unter Ubuntu 22.04