web-dev-qa-db-ja.com

Docker apt-get更新が失敗する

誰かが私のドッカーコンテナでapt-getを動作させるのを手伝ってくれますか? Dockerコンテナでapt-getコマンドを実行しようとすると、コマンドは失敗します。 Dockerバージョン1.1.1を実行しています。ubuntu12.04でbd609d2をビルドします。

私がする時

$ Sudo docker run -i -t ubuntu:14.04 /bin/bash
# apt-get update

次のエラーが表示されます

「archive.ubuntu.com」を解決できませんでした

/ etc/default/dockerで以下の行のコメントを外してみました

DOCKER_OPTS = "-dns 8.8.8.8 --dns 8.8.4.4"

まだgoogle.comにpingできません

ping:不明なホスト

コンテナがDNSサーバー8.8.8.8および8.8.4.4を使用していることを確認しました

root @ 0baa87fc6322:/#cat /etc/resolv.conf

ネームサーバー8.8.8.8

ネームサーバー8.8.4.4

両方のサーバーにpingを送信できるので、ファイアウォールがパケットをドロップするだけではないことを確信しています。

これに関する助けをいただければ幸いです!

ありがとう!

29
jbadua

ご助力いただきありがとうございます! DNSの問題であり、ファイアウォールが原因であることがわかりました。さらに検索した後、「docker apt-get fail」を検索中に見つけることができなかったこの質問を見つけました

Docker-企業ネットワークでのイメージ構築中にネットワーク呼び出しが失敗する

彼の問題は私のものに似ていて、解決策は私がそれを機能させるのに役立ちました。将来この質問を見つけた人のために、私は彼の解決策をコピーしました。

これらのGoogleサーバーはファイアウォールの背後からアクセスできなかったため、URLを解決できませんでした。

修正は、使用するDNSサーバーをDockerに指示することです。この修正は、Docker:Ubuntu Packageのインストール方法に依存します

Ubuntuパッケージがインストールされている場合は、/ etc/default/dockerを編集して次の行を追加します。

DOCKER_OPTS = "-dns <your_dns_server_1> --dns <your_dns_server_2>"

この構成には、必要な数だけDNSサーバーを追加できます。このファイルを編集したら、Dockerサービスを再起動します。

Sudoサービスドッカーの再起動

バイナリ

バイナリー方式(つまりパッケージなし)でDockerをインストールした場合、Dockerデーモンを開始するときにDNSサーバーを設定します。

Sudoドッカー-d -D --dns --dns&

26
jbadua

Could not resolve ...のようなエラーが表示された場合、それはおそらくDNS設定です。

最初に確認するのは、docker containercat /etc/resolv.confを実行することです。 nameserver 127.0.x.xなどの無効なDNSサーバーがある場合、コンテナはドメイン名をIPアドレスに解決できないため、ping google.comは失敗します。

2番目に確認することは、ホストマシンでcat /etc/resolv.confを実行することです。 Dockerは基本的に、コンテナが起動するたびにホストの/etc/resolv.confをコンテナにコピーします。そのため、ホストの/etc/resolv.confが間違っていると、dockerコンテナも間違っています。

ホストの/etc/resolv.confが間違っていることがわかった場合、2つのオプションがあります。

  1. Daemon.jsonでDNSサーバーをハードコードします。これは簡単ですが、DNSサーバーの変更が予想される場合は理想的ではありません。

  2. ホストの/etc/resolv.confを修正します。これは少し複雑ですが、動的に生成され、DNSサーバーをハードコーディングしていません。


1。 docker daemon.jsonでDNSサーバーをハードコードする

  • 編集/etc/docker/daemon.json

    {
        "dns": ["10.1.2.3", "8.8.8.8"]
    }
    
  • これらの変更を有効にするために、Dockerデーモンを再起動します。
    Sudo systemctl restart docker

  • コンテナを実行/起動すると、Dockerは/etc/resolv.confdaemon.jsonの値を設定します。


2。ホストの/etc/resolv.confを修正します

A。 Ubuntu 16.04以前

  • Ubuntu 16.04以前では、/etc/resolv.confはNetworkManagerによって動的に生成されました。

  • dns=dnsmasqの行#/etc/NetworkManager/NetworkManager.conf付き)をコメントアウトします

  • NetworkManagerを再起動して/etc/resolv.confを再生成します:
    Sudo systemctl restart network-manager

  • ホストで確認:cat /etc/resolv.conf

B。 Ubuntu 18.04以降

  • Ubuntu 18.04は、 systemd-resolvedを使用して/etc/resolv.conf を生成するように変更されました。現在では、デフォルトでローカルDNSキャッシュ127.0.0.53を使用します。これはコンテナ内では機能しないため、DockerはデフォルトでGoogleの8.8.8.8 DNSサーバーになります。

  • /etc/resolv.confは、Ubuntu 18.04ではデフォルトでls -l /etc/resolv.conf(127.0.0.53)を指すシンボリックリンク(/run/systemd/resolve/stub-resolv.conf)です。

  • シンボリックリンクを変更して、実際のDNSサーバーをリストする/run/systemd/resolve/resolv.confを指すようにします。
    Sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

  • ホストで確認:cat /etc/resolv.conf

これで、Dockerがコンテナにコピーするための有効な/etc/resolv.confがホストにあるはずです。

9
wisbucky

最初に、接続があるかどうかを確認し、91.189.92.201が指すip archive.ubuntu.comに直接pingします。

ping 91.189.92.201

それでもホストに到達できない場合は、DNSの問題ではありません。

また、インターネットに接続している場合は、ハッキングすることができます。 /etc/hostsファイルに行を入れるだけで問題が解決しました。

91.189.92.201 archive.ubuntu.com

4
Justas Pukys

2つの異なるケースで問題が発生し、解像度が異なりました...

Win7 + virtualbox(Xubuntu 16.04)を使用した最初のものこのコメントは仕事をしました: https:// stackoverflow .com/a/29659783/2260796

ファイル/ etc/default/dockerを変更します。

DOCKER-OPTS = "-ip-masq = true --dns my_ip_dns_win --dns 8.8.8.8 --dns 8.8.4.4"そして、Sudoサービスdocker restartを実行します

Xubuntu OS(ubuntu 16.04)の2番目のオプション先例の解像度では不十分でした。このコメントは仕事をしました: https://github.com/docker/docker/issues/1809 ファイル/etc/NetworkManager/NetworkManager.confの1行をコメントしなければなりませんでした:

dns = dnsmasq

次に実行する

Sudo restart network-manager

2
Garag

私はMintのバージョンを使用しており、Dockerをインストールし、Ubuntuのイメージを作成してapt-get updateコマンドが認識しないようにし、問題を解決するためにステップダウンしました

docker run -it -p 8080:80  ubuntu /bin/bash
echo "91.189.92.201 archive.ubuntu.com" >> /etc/hosts
cat /etc/hosts
apt-get update
1
cristofersousa

Error with docker-composedocker-composeで同じ問題に直面しました。 ENV http_proxy 'proxy.com'エントリをDockerfileに追加することで解決します。

0
Lasith Niroshan