GNU/Linux >> Linux の 問題 >  >> Linux

DockerComposeでのホスト名の設定

Docker Composeでホスト名を設定する方法を知りたいですか?それをお見せします。

次のようなサービスで定義できます:

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

しかし、本当にそれが必要ですか?ホスト名の一般的な目標は、ネットワーク上のコンピューターが相互に認識し、相互に通信することです。

同様に、ここでの主な目標は、コンテナーがDockerネットワーク内で相互に正常に通信できるようにすることです。

これを可能にする方法について、2つの方法について説明します。

方法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

2つのサービス名はnginx-proxyであることに注意してください およびletsencrypt 。これらの名前を使用して、コンテナーが相互に通信できるかどうかをテストできます。これは、トラブルシューティングの状況で非常に役立ちます。

まず、Nginxリバースプロキシコンテナ内にpingをインストールします:

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

これで、このコンテナー内でpingコマンドを使用して、Let's Encryptコンテナー(SSLに使用)と通信できるかどうかを確認できます。

[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

上記のように、リバースプロキシコンテナは、応答を返す2番目のSSLコンテナを「認識」します。 nginx-proxy_letsencrypt_1.net内 、nginx-proxy_letsencrypt_1 SSLコンテナ名とnet カスタムネットワークです。

簡単に確認しましょう:

[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

ネットワークを確認するには、docker network lsを使用できます コマンド。

[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

方法2:明示的なコミュニケーション

何らかの理由で、コンテナにホスト名を明示的に指定したいとします。 Docker Composeを使用すると、それも可能になります!

hostnameを使用する 構成オプションを使用すると、以下のLet's Encryptサービスで行ったように、DockerComposeファイル内で定義された任意のサービスに別のホスト名を設定できます。

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'sEncryptサービス定義内。 ledockerを使いたい SSLコンテナのホスト名として。

しかし、待ってください。pingコマンドを使用して再確認できますか?

[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

確かにそう。動作します!

この点に関する知識をもっと知りたいですか?この非常に有益なGitHubスレッドをチェックしてください。

この簡単なヒントを楽しんでいただけたでしょうか。以下のコメントセクションに質問、疑問、提案を残すことができます。


Linux
  1. DockerComposeの使用方法

  2. Docker Composev2の新機能

  3. DockerComposeを使用するためのクイックガイド

  1. Ubuntu18.04にDockerComposeをインストールする方法

  2. Docker Compose、Nginx、SSL を使用した Apache で WordPress をインストールする

  3. Docker コンポーズ ボリューム アクセス許可 linux

  1. DockerComposeとは

  2. Ubuntu18.04にDockerComposeをインストールする方法

  3. ホスト名の設定:FQDN または短い名前?