誰かが私のドッカーコンテナで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を送信できるので、ファイアウォールがパケットをドロップするだけではないことを確信しています。
これに関する助けをいただければ幸いです!
ありがとう!
ご助力いただきありがとうございます! 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&
Could not resolve ...
のようなエラーが表示された場合、それはおそらくDNS設定です。
最初に確認するのは、docker containerでcat /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つのオプションがあります。
Daemon.jsonでDNSサーバーをハードコードします。これは簡単ですが、DNSサーバーの変更が予想される場合は理想的ではありません。
ホストの/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.conf
にdaemon.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
がホストにあるはずです。
最初に、接続があるかどうかを確認し、91.189.92.201
が指すip archive.ubuntu.com
に直接pingします。
ping 91.189.92.201
それでもホストに到達できない場合は、DNSの問題ではありません。
また、インターネットに接続している場合は、ハッキングすることができます。 /etc/hosts
ファイルに行を入れるだけで問題が解決しました。
91.189.92.201 archive.ubuntu.com
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
私は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