概要
Windows版のDockerを使っていてCentOSのDockerイメージをビルドしようとしたときDockerfileに記載している yum install
コマンドで以下のエラーが発生するようになりました。
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os&infra=container error was
14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
ERROR: Service 'sample' failed to build: The command '/bin/sh -c yum install -y epel-release' returned a non-zero code: 1
Couldn't resolve host
となっているので、どうやら名前解決ができていないようです。
DNSまわりの設定を見直せば解決するだろうと思っていましたが、少しはまったので対処方法をメモしておきます。
それにしても今までDockerイメージのビルドが普通にできていて突然エラーとなるのは謎です。
対象
- Windows版のDockerを利用している。
- ホストマシンがドメインに参加している。
- CentOSのDockerイメージをビルドしている。
- yum installでCouldn't resolve hostエラーになる。
試したこと
(1) インターフェース設定ファイルの更新
インターフェースファイル /etc/sysconfig/network-scripts/ifcfg-eth0
が ONBOOT=no
になっていると通信ができないようなので ONBOOT=yes
になるように設定してみます。
sed -ri 's/ONBOOT=no/ONBOOT=yes/' /etc/sysconfig/network-scripts/ifcfg-eth0
結果
そもそもCentOSのDockerイメージにはインターフェースファイルが存在していませんでした。
今までDockerイメージのビルドはできていたのでこのファイルは関係ないようです。
(2) レゾルバ設定ファイルの更新
DNSがうまく参照できなくなった可能性もあるので、レゾルバ設定ファイルにGoogle Public DNSを設定してみます。
echo 'nameserver 8.8.8.8' >> /etc/resolv.conf
結果
変わらず yum install
コマンドでエラーになります。
(3) docker-compose.yml ファイルの更新
docker-composeを利用しているので docker-compose.yml
ファイルからもGoogle Public DNSを設定してみます。
services:
sample:
dns:
- 8.8.8.8
結果
変わらず yum install
コマンドでエラーになります。
(2)、(3)でDNSを設定しているにもかかわらず名前解決ができていないので、Dockerデーモン自体に問題があるようです。
(4) Docker デーモンの設定の更新
タスクトレイから Docker のアイコンを右クリックして Settings を開きます。
Daemon メニューをクリックしてDocker デーモンの設定を表示します。
Basic
を Advanced
に切り替えてから dns
の設定を追加します。
"dns": [
"8.8.8.8"
]
設定を追加したら Apply
ボタンで適用します。
適用後は Reset メニューから Restart Docker...
で Docker デーモンの再起動を行います。
結果
この設定変更で解決しました。
今までどおり yum install
コマンドが使えるようになり、Dockerイメージのビルドが成功しました。
まとめ
ホストマシンがドメインに参加している場合、Dockerイメージのビルドで yum install
が突然エラーになることがあります。その場合はDocker デーモンの設定からDNSを追加することで対処できます。