CentOS7上でNodeをDockerで動かす ~ コンテナbuild時に名前解決ができない時にしたこと
docker composerを使ってnode.jsのコンテナをビルドしようとしたら結構はまったのでメモ。
環境としては、
ホスト: CentOS Linux release 7.2.1511 (Core)
$ docker version Client: Version: 1.11.1 API version: 1.23 Go version: go1.5.4 Git commit: 5604cbe Built: Wed Apr 27 00:34:42 2016 OS/Arch: linux/amd64 Server: Version: 1.11.1 API version: 1.23 Go version: go1.5.4 Git commit: 5604cbe Built: Wed Apr 27 00:34:42 2016 OS/Arch: linux/amd64 $ docker-compose --version docker-compose version 1.7.1, build 0a9ab35
こんな感じです。
コンテナのイメージはDocker Hubにあるものを利用します。
https://hub.docker.com/_/node/
onbuildというイメージをベースに使うとnpm installしてnpm startしてくれるみたいなのでこれを使ってみることにしました。
Dockerfileには1行だけ記述してpackage.jsonと同じディレクトリに置きます。
FROM node:6-onbuild
docker composerも使うので、docker-composer.ymlを以下のように記述。
nodeappの下にDockerfileとpackage.jsonがあります。
version: '2' services: node-app: build: ./nodeapp image: node-app:20160616
ファイルの構成としてはこんな感じ。
├── docker-compose.yml └── nodeapp ├── Dockerfile ├── README.md ├── app.js └── package.json
これでdocker-compose up すればうまくいくはず!だったんですがnpm installでリポジトリが見つからずbuildのところで失敗。
DNSが引けてないんだろうというところまではすぐあたりがつきましたがその解決方法をググってやってみてもなかなかうまくいかず、はまりポイント。
自分の環境では、/etc/sysconfig/docker とか /etc/default/docker といったファイルがなく、
それぞれファイルを作って
DOCKER_OPTS="--dns 8.8.8.8"
OPTIONS="--dns 8.8.8.8"
なんて書いてdockerのサービスを再起動してみても状況が変わらず。
自分の環境でうまくいったのは、/usr/lib/systemd/system/docker.service を以下のように変更
ExecStart=/usr/bin/docker daemon -H fd:// ↓ ExecStart=/usr/bin/docker daemon -H fd:// -dns=8.8.8.8
その後以下のようにデーモンの再読み込みとDockerのサービスを再起動をして解決!
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
とりあえずうまくいってよかった。