UbuntuのDockerコンテナ内にpipパッケージをインストールできません


86

私はPythonアプリケーションでdockerを使用するためのfigガイドに従っていますが、dockerがコマンドに到達したとき

RUN pip install -r requirements.txt

次のエラーメッセージが表示されます。

Step 3 : RUN pip install -r requirements.txt
 ---> Running in fe0b84217ad1
Collecting blinker==1.3 (from -r requirements.txt (line 1))
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ProtocolError('Connection aborted.', gaierror(-2, 'Name or service not known'))': /simple/blinker/

これが数回繰り返され、別のメッセージが表示されます。

Could not find any downloads that satisfy the requirement blinker==1.3 (from -r requirements.txt (line 1))
  No distributions at all found for blinker==1.3 (from -r requirements.txt (line 1))

そのため、何らかの理由で、pipはdockerコンテナー内からパッケージにアクセスできません。インターネットアクセスを許可するために必要なことはありますか?

ただし、pipはdockerコンテナーの外部にインストールする場合は正常に機能し、その正確なパッケージ(blinker==1.3)でも正常に機能するため、問題はありません。また、この問題はそのパッケージに固有のものではありません。pip installどのパッケージのどのコマンドでも同じ問題が発生します。

誰かがここで何が起こっているのか考えていますか?


Dockerコンテナのpipバージョンは何ですか?docker run mycontainer pip install -r requirements.pipイチジクの文脈の外で試しましたか?それでも、pipバージョンの問題のようです。一部の新しいpipバージョンpip installでは、実行時にコマンドラインオプションをいくつか指定して、特定のパッケージが検出されるようにする必要があります。
Torsten Engelbrecht 2015

私のdockerfileにはFROM python:2.7、python2.7.9に付属しているpipのバージョンになります。pipコマンドを個別に実行しようとしたことはありませんが、pipが機能していないため、コンテナーをビルドすることすらできないためです。空のPythonコンテナを作成して、機会があればそれをテストしてみるかもしれません
Migwell 2015

1
たぶんあなたは試すことができます、pip install --no-use-wheel --allow-all-external -r requirements.pipまたはそれが試すのに役立たない場合pip install --no-use-wheel --allow-all-external --allow-unverified blinker -r requirements.pip。これは、過去にpip install。と同様のエラーが発生したときに機能しました。また、DockerFileからその行を削除してから、それなしでコンテナーをビルドして、コマンドが後で実行できるかどうかをテストすることもできます。とはいえ、ここではそれが問題だとは思いません。
Torsten Engelbrecht 2015

dockerbuild

回答:


60

あなたの問題は、Dockerが適切なDNSサーバーを使用していないという事実から来ています。あなたは3つの異なる方法でそれを修正することができます:

1.ローカル設定にGoogleDNSを追加する

/etc/resolv.confを変更し、最後に次の行を追加します

# Google IPv4 nameservers nameserver 8.8.8.8 nameserver 8.8.4.4

他のDNSサーバーを追加したい場合は、こちらをご覧ください

ただし、この変更は永続的ではありません(このスレッドを参照)。永続的にするには: $ sudo nano /etc/dhcp/dhclient.conf コメントを外し、前にdomain-name-serverを付けて行を編集します: prepend domain-name-servers 8.8.8.8, 8.8.4.4;

dhclientを再起動します:$ sudo dhclient

2.Docker構成の変更

ドキュメントで説明しました

デスクトップでUbuntuまたはUbuntu派生物を実行するシステムは、通常、/ etc /resolv.confファイルのデフォルトネームサーバーとして127.0.0.1を使用します。

Dockerで使用するDNSサーバーを指定するには:

1. Log into Ubuntu as a user with sudo privileges.

2. Open the /etc/default/docker file for editing :

    $ sudo nano /etc/default/docker

3. Add the following setting for Docker.

    DOCKER_OPTS="--dns 8.8.8.8"

4. Save and close the file.

5. Restart the Docker daemon :

    $ sudo systemctl restart docker

3.Dockerを実行するときにパラメーターを使用する

dockerを実行するときは、次のパラメーターを追加するだけです。 --dns 8.8.8.8


1
docker-composeにDNSを設定しましたが、それでも機能しません。何か案が?
ismailsunni 2015年

14
わかりました。Dockerマシンを再起動すると問題が解決します。ありがとう
ismailsunni 2015年

1
ローカル構成にGoogleDNSを追加した後、Docker構成ファイルでDNSサーバーを指定しなくても機能しました(追加した場合は機能しませんでした)。私は
Ubuntu14.04とDocker1.12.2

私の知る限り、--dnsフラグはdockerコマンドでのみ使用できます。Docker-Composeに相当するものがまだ見つかりません。
Sebastialonso

26

dockerbuildコマンドに--network = hostを追加する必要がありました。

docker build --network=host -t image_name .

2
これは、Ubuntu 19.10 VM(Windows 10で実行されているHyper-Vクイック作成で作成されたもの)で何も変更する必要がなく、私のために機能しました
Wlad

22

私は同じ問題を抱えていて、しばらくの間私を悩ませ、オンラインで多くの解決策を試しましたが、役に立ちませんでした。しかし、私は最終的にそれを次のように解決しました:

ランニング:

Ubuntu 16.04 
docker Server 18.03.0-ce
  1. DNSサーバーのアドレスを見つけます。

    次のコマンドを実行して、DNSサーバーのアドレスを検出します。

    $: nmcli dev show | grep 'IP4.DNS'
    IP4.DNS[1]:                192.168.210.2
    
  2. Dockerデーモンを更新します

    でdocker構成ファイルを作成し/etc/docker/daemon.json.まだ持っていない場合)、次のコンテンツをファイルに追加します。

    {
        "dns": ["192.168.210.2", "8.8.8.8"]
    }
    

    アレイの最初の項目はネットワークのDNSサーバーであり、2番目の項目はネットワークのDNSが利用できない場合のフォールバックとしてのgoogleのDNSサーバーです。

    ファイルを保存してから、Dockerサービスを再起動します

    $: sudo service docker restart
    

2
これで私の問題は解決しましたdocker-ce。注:私はファイルを持っていませんでしたdaemon.json。おそらく、そのファイルはインストール中にデフォルトで作成されないため、手動で作成する必要があります。
floatingpurr

2
これは、Ubuntu18.04.1で私のために働いた唯一のものです。nmcliコマンドから2つのDNSを見つけ、両方をdaemon.jsonに含めました。
newalp 2018

Ubuntu18.04.2で私のために働いたのはそれだけです。溶液はdekauliyaからの回答により、以前この記事で提案された
PatriceG

機能した。また、このソリューションは他のソリューションよりもはるかに邪魔になりません。ありがとうございました!
Sebastialonso

CentOS7で作業しました。ありがとうございます!!
スクーン

16

わかりました。Dockerマシンを再起動すると問題が解決します。ありがとう– ismailsunni

これが私にとっての解決策でした:

docker-machine restart <machine-name>

1
Windowsを使用していて、<machine-name>引数がどうあるべきかわからない場合:PowerShellを開いて実行docker-machine restartし、docker-machine env(プロンプトが表示されたとおりに)実行すると、問題が修正されました。
Nathan Wailes 2018年


8

Ubuntuユーザーの場合

dockerconfigに新しいDNSアドレスを追加する必要があります

sudo nano /lib/systemd/system/docker.service

ExecStarの後にDNSを追加します。

--dns 10.252.252.252 --dns 10.253.253.253

そのように見えるはずです:

ExecStart=/usr/bin/dockerd -H fd:// --dns 10.252.252.252 --dns 10.253.253.253

次に、次のことを行います。

systemctl daemon-reload
sudo service docker restart

動作するはずです。


1
これは私のために働いた唯一の解決策です。Ubuntu 16.04、Docker 17.03.1-ce
Simon Arsenault 2017年

2
Ubuntu 16.04での作業は、他に何の役にも立ちませんでした。
シャンキー2017

この後、dockerを起動できません:docker.service:結果 'exit-code'で失敗しました。
davegallant 2017

2
10.252.252.252と10.253.253.253について特に特別なことはありますか。Ubuntu 16.04Docker17.09.0-ceを実行していますが、これは機能しません
Max

1
Ubuntuの18.04.2 LTSとドッカー上18.06.1-CE動作しませんでした
PatriceG

6

私の場合は、とdocker version 1.13.0し、docker-machine 0.9.0下のUbuntu 16.04私は、次のように少しTanzahoの回答(2変更ドッカー設定)を変更する必要がありました:

  1. sudo権限を持つユーザーとしてUbuntuにログインします。

  2. / etc / default / dockerファイルを開いて編集します。

    sudo vim /etc/default/docker
    
  3. Dockerに次の設定を追加します。

    DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
    
  4. ファイルを保存して閉じます。

  5. Dockerデーモンを再起動します。

    sudo service docker restart
    

6

誰かがdocker-composeを使用してこれを読んでいる場合。yamlファイルを次のように変更することでこれを解決することができました

version: 3.4
service: my-app
  build:
  context: .
  network: host

これは書くのと同じです

docker build . --network host

5

DockerのDNSが正しく構成されていないため、pipをインストールできませんでした。上記の手順を試しましたが、DockerDNSをGoogleDNSに構成してもラップトップでは機能しません。DockerのDNSは、ラップトップに割り当てられたIPにDNSを設定した場合にのみ適切に構成できます。

Ubuntuを使用している場合は、次の手順を使用してDockerのDNSを構成できます。

  1. デバイスに割り当てられているIPを確認します。あなたはどちらかでこれを見つけることができます

    • イーサネットまたはWLANのinetアドレスを確認する ifconfig
    • で任意のアドレスを選択する nmcli dev show | grep 'DNS'
  2. DNSを編集し/etc/docker/daemon.jsonます(以前に存在しなかった場合はこのファイルを作成します)

    {
        "dns": ["your_ip_in_step_1"]
    }
    
  3. Dockerを再起動します: sudo service docker restart


私のためにも働いた。これは、新しいバージョンのDockerに適用されるソリューションのようです。詳細については、askubuntu.com / a / 790778/776407
Stefan Sieber

4

Dockerの初心者として、Dockerのチュートリアルを次の場所でフォローしているときに、このように現れる問題がありました。

https://docs.docker.com/get-started/part2

企業LANでDocker17.03.1-ceを使用しています。

DNS設定を確認して再確認しました。インターネットでの検索で見つけたDNSを構成するさまざまな方法を使用しました。起動時にエラーが発生する原因もありました。DNSを構成するために私が最終的に決めたアプローチは、上記のリンクの「Linuxのトラブルシューティング」セクションにあるアプローチで、DNSは/ etc / dockerディレクトリのdaemon.jsonファイルを介して構成されています。

しかし、私はまだこれと同じ問題を抱えていました。私にとって最終的に問題を解決したのは、http_proxyおよびhttps_proxy環境変数を介したプロキシ構成でした。Dockerfileで指定しましたが、RUNpipコマンドの前に指定しませんでした。

DNSの問題のように見えましたが、これらのENVコマンドをRUNコマンドの前に移動することで違いが生じました。それがこの問題を抱えている人に役立つ場合。


これは私のために働いた唯一の解決策です。ありがとう!
msingh

3

理由はわかりませんが、エラーは、pipが部分/simple/blinker/ではなくDNSホスト名として解決しようとしていることを意味しpypi.python.orgます。これurlparseは、ホスト名などの文字列を返すことができるURLを思い付くことができないため、非常に奇妙に思えます。部。何か問題がないか確認します~/.pip/pip.conf


3

同じ問題が発生しました。エラーの原因はプロキシです。

だから、私はDockerfileを次のように編集します

RUN pip install -r /app/requirements.txt --proxy=http://user:pass@addr:port

私の場合はうまくいきました。プロキシオプションから[user:passwd @]を削除する必要がありました。これはpipのドキュメントによるとオプションです。-proxy<proxy>:[user:passwd @] proxy.server:portの形式でプロキシを指定します。
AlexJavarotti19年

3

私にとって、それは私の大学のVPNに接続されていることが原因でした。切断すると問題が「解決」しました。


1

DockerDNSをGoogleDNS(8.8.8.8)または10.0.0.2に構成しても、私の会社の環境では機能しませんでした。

実行中:$ Drill @ 8.8.8.8www.amazon.comまたは@ 10.0.0.2でこれが確認されました。

動作するDNSを見つけるために、次のコマンドを実行しました。$ Drill www.amazon.comと、ネットワークで使用されているDNSIPが表示されました。

次に、次の手順を使用してUbuntuに設定し、DockerのDNSを構成します。

/etc/docker/daemon.jsonのDNSを変更しました

{
    "dns": ["the DNS ip from step1"]
}

Restart docker: sudo service docker restart

私は同じ状況にありますが、解決策は私にはうまくいかないようです。私のコンテナはまだ外部のインターネットに接続できません
harpratap 2018

1

Dockerを初めて使用し、ここに記載されているすべての方法を試しましたが、それでも正しく実行できませんでした。Dockerのバージョンは18で、ubuntuのバージョンは16でした。私はこの方法を試しました。-最初に、会社のインターネットネットワークでDockerを構築していました。このネットワークは、いくつかのサイトをブロックしている、またはここで物事がうまくいかなかった方法をいくつかブロックしています。そこで次に、自分のネットワーク(たとえば携帯電話で使用している)に接続して試してみました。物事はうまくいった。require.txtが正常にインストールされ、dockerがビルドされました。


0

それを実行させます。時々、pypiは接続の問題を抱えており、それが壊れていると思わせるために騒々しく顔に出されます。念のために言っておきますが、それを転がしてみましょう。それ自体でうまくいくことがわかるかもしれません。

これらの赤いエラーラインにもかかわらず、収益は「正常に構築された」です。

$ docker build .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM docker-registry.aws.example.com:5000/cmcrc/python2:20160517120608
 ---> 1e5034711aa9
Step 2 : RUN pip install prometheus-client requests
 ---> Running in f3c580fc93ae
Collecting prometheus-client
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8610>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d87d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8990>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8b50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe15a1d8d10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/prometheus-client/
  Downloading prometheus_client-0.0.13.tar.gz
Collecting requests
  Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9d4d0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9da10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dc50>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9de10>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None)) after connection broken by 'NewConnectionError('<pip._vendor.requests.packages.urllib3.connection.HTTPConnection object at 0x7fe159e9dfd0>: Failed to establish a new connection: [Errno -2] Name or service not known',)': /pypi/requests/
  Downloading requests-2.10.0-py2.py3-none-any.whl (506kB)
Building wheels for collected packages: prometheus-client
  Running setup.py bdist_wheel for prometheus-client: started
  Running setup.py bdist_wheel for prometheus-client: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/04/94/f5/b803b2ff65e8344e99ca99b7f7cb8194224017167809a32b78
Successfully built prometheus-client
Installing collected packages: prometheus-client, requests
Successfully installed prometheus-client-0.0.13 requests-2.10.0
 ---> 19c5e3cfe08f
Removing intermediate container f3c580fc93ae
Successfully built 19c5e3cfe08f
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.