記事を書いた理由
Dockerを利用してWordpressをインストールしようとしたらMySQLに接続できなかったので、その備忘録として
何が発生したか
docker run --name wordpress --link some-mysql:mysql wordpressでwordpressのコンテナが起動してすぐ終了する。
docker logs wordpressを見ると'root'@'172.17.0.3'での接続に失敗していた。
原因
MySQLの公式コンテナはbind-addressをコメントアウトしており、localhost以外のアクセスを拒否している。
https://github.com/docker-library/mysql/blob/7dea35524a41992ed669858e80c07c5d666d5426/5.7/Dockerfile#L36
対策
せめてコンテナ間でのアクセスはできるようにmy.cnfを書き換え。(Dockerコンテナは172.17.0.0/16のネットワークに所属している)
Dockerfile
FROM mysql:5.7
MAINTAINER XXX xxx@xxx.com
RUN sed -Ei 's/#bind-address*/bind-address = 172.17.0.0/16' /etc/mysql/my.cnf
あとは上記のDockerfileをビルドして起動させる。
docker build -t xxx/mysql:latest .
docker run --name mysql -d xxx/mysql
docker run --name wordpress --link mysql:mysql wordpress
そもそもの勘違い
docker run --linkをしたときの挙動を勘違いしてた。
てっきりdocker run --linkを実行すると--linkしたコンテナ内の内容を自由に使えるものかと思っていた。
実際はlinkしたコンテナのネットワークの情報が環境変数に書き出されるだけなんですね。
コンテナの利点を全く理解しないまま使ってました。自分怖い。