Dockerのlink機能 その2 アプリケーションサーバの設定

前回までのまとめ

前回Docker実践ガイドの第5章のlink機能を用いたアプリケーションサーバ用コンテナとDB用コンテナを起動するところまで行いました。

今回はアプリケーションサーバの設定を行い、linkしているコンテナが正しく動いているかを確認します。

アプリケーションサーバの設定

まずはじめにアプリケーションサーバのIPアドレスを確認します

1
2
$ docker container inspect mw0001 --format={{'.NetworkSettings.IPAddress'}}
172.17.0.4

docker container inspect コンテナ名とすることでコンテナ名に指定したコンテナの情報をJSON形式で取得することができます

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
$ docker container inspect mw0001
[
{
"Id": "a4d1693a7981100b015d75f958468069c7418e11dad13e042bf26f5454246581",
"Created": "2020-06-22T11:03:55.9929367Z",
"Path": "/sbin/init",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
...
(中略)
...
"MacAddress": "02:42:ac:11:00:04",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "d6a62553445bbae6f040e8972635b12995ca2b23f0328ab8736f7a2b71d541bb",
"EndpointID": "73fae0f570728362bbe4c504ef79e98df191c9352375e9d1805b73ef56613ad2",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.4",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:04",
"DriverOpts": null
}
}
}
}
]

--formatオプションで取得する値を指定することができます。

ブラウザからのアクセス

アプリケーションサーバのIPアドレスがわかったので、ブラウザからアクセスしてみます。
URLはhttp://172.17.0.4/wiki/です。

しかし応答が返ってきません。-pオプションを利用していないのにIPアドレスがわかったところで通信できるのでしょうか?書籍ではLinuxをホストOSとして動作させているので可能なのかもしれません。わたしの手元の環境はDocker Desktopだからかもしれません。

一旦-pオプションを利用してアクセスできることを確認します。

1
2
3
$ docker stop mw0001
$ docker rm mw0001
$ docker container run -itd --tmpfs /tmp --tmpfs /run --mount type=bind,src=/sys/fs/cgroup,dst=/sys/fs/cgroup,readonly --stop-signal SIGRTMIN+3 -v /var/www/html --name mw0001 -h mw0001 --link mariadb0001:db0001 -p 8080:80 centos:mw0001 /sbin/init

今回は-p 8080:80を設定しています。よって、URLはhttp://localhost:8080/wiki/です。すると、正しく表示されました。

が、しかし、データベースの接続設定のところで、mariadb0001のIPアドレス、ユーザー名、パスワードを入力すると

1
2
Cannot access the database: MySQL server has gone away (172.17.0.3)。
以下のホスト名、ユーザー名、パスワードを確認してから再度試してください。

というエラーが出てしまった。パスワードは間違ってなさそうです。

ちょっと原因がわからないので、一旦linkオプションを用いたコンテナ間通信はここまでにしようと思います。

次回はコンテナ間通信を行うもう一つの方法、bridgeネットワークを用いたコンテナ間通信を試したいと思います。