サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 74 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

ブリッジネットワークを使用しない場合

tin
tin
2023-03-11 / 0 コメント / 75 ビュー / 1,013 文字

背景

ブリッジネットワークの使用で通信する際、相手コンテナのIPアドレスを意識しなくても良い。便利ですね。
一方、ブリッジネットワークを使用しない場合、どうなりますか。
もちろん、通信は大丈夫ですが、相手のIPアドレスを指定する必要があります。
固定IPアドレスなら、別に便利ではないとも言えないですが、
IPアドレスが頻繫に変動したり、コンテナを別のホストに移動したり数場合、通信ができなくなる場合はありますね
次はブリッジネットワークを使用しないで、Linux+nginx+php環境を構築してみます。

1. ブリッジネットワークを使用しないでphpコンテナを起動する

[root@localhost /]# docker run -p 9000:9000 --name php-fpm \
-v /work/www:/var/www/html \
-d php:7.1-fpm
6656876bfd4ef1f4f0c6f778622f11a7d027e4c98e9534aca5973af308de170e
[root@localhost /]# 
[root@localhost /]# docker ps
CONTAINER ID   IMAGE         COMMAND                   CREATED         STATUS         PORTS                                       NAMES
6656876bfd4e   php:7.1-fpm   "docker-php-entrypoi…"   3 seconds ago   Up 2 seconds   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php-fpm
[root@localhost /]# 
[root@localhost /]# 

2. phpコンテナのネットワークを確認

[root@localhost /]# docker inspect php-fpm | tail -22
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "90f98361e6f902c50a07cf7806f623b540bd21471a9902b5d213bc70fbbae91d",
                    "EndpointID": "c4e763127a6d637a8b6d16df45f56e781e7c451cc7c3bbc44ca3b6471bbda41f",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",  //ブリッジネットワークしない場合、このIPアドレスを使用することになる
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

3. nginxコンテナを起動

⇒失敗

[root@localhost /]# docker run -p 80:80 --name nginx \
-v /work/www:/usr/share/nginx/html \
-v /work/nginx/conf.d:/etc/nginx/conf.d \
--net lnmp \          //nginxコンテナはブリッジネットワークを使っています
-e TZ=Asia/Tokyo \
--privileged=true \
-d nginx
0a11ff8960e5fe40a7661067fa55ca37d2423d6cbb487efd29543ec9a69dd337
[root@localhost /]# 
[root@localhost /]# docker ps
CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS          PORTS                                       NAMES
6656876bfd4e   php:7.1-fpm   "docker-php-entrypoi…"   44 seconds ago   Up 43 seconds   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php-fpm
[root@localhost /]# 

4. ログを確認して、php-fpmに接続できない

[root@localhost /]# docker logs nginx 
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf differs from the packaged version
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2023/03/11 22:08:31 [emerg] 1#1: host not found in upstream "php-fpm" in /etc/nginx/conf.d/default.conf:12
nginx: [emerg] host not found in upstream "php-fpm" in /etc/nginx/conf.d/default.conf:12
[root@localhost /]# 

5. php-fpmをphpのIPアドレス(172.17.0.2)に修正

修正前:fastcgi_pass php-fpm:9000;
修正後:fastcgi_pass 172.17.0.2:9000;

[root@localhost /]# cat /work/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;
    
    location / {
        root   /usr/share/nginx/html;
        index  index.php index.html index.htm;
    }
    
    location ~ \.php(.*)$ {
        root             /var/www/html;  # php コンテナのワークディレクトリ      
        fastcgi_pass     172.17.0.2:9000;    #ここは修正箇所:phpコンテナのIPアドレスを記入
        fastcgi_index    index.php;
        fastcgi_param    SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include          fastcgi_params;
    }

}
[root@localhost /]# 

6. nginxを再起動

⇒起動出来ました!

[root@localhost /]# docker restart nginx 
nginx
[root@localhost /]# docker ps
CONTAINER ID   IMAGE         COMMAND                   CREATED          STATUS          PORTS                                       NAMES
0a11ff8960e5   nginx         "/docker-entrypoint.…"   10 minutes ago   Up 3 seconds    0.0.0.0:80->80/tcp, :::80->80/tcp           nginx
6656876bfd4e   php:7.1-fpm   "docker-php-entrypoi…"   11 minutes ago   Up 11 minutes   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp   php-fpm
[root@localhost /]# 
[root@localhost /]#