プロキシの背後でDockerイメージをダウンロードできない


330

Ubuntu 13.10(Saucy Salamander)にDockerをインストールし、コンソールに入力すると、次のようになります。

sudo docker pull busybox

次のエラーが発生します。

Pulling repository busybox
2014/04/16 09:37:07 Get https://index.docker.io/v1/repositories/busybox/images: dial tcp: lookup index.docker.io on 127.0.1.1:53: no answer from server

Dockerバージョン:

$ sudo docker version

Client version: 0.10.0
Client API version: 1.10
Go version (client): go1.2.1
Git commit (client): dc9c28f
Server version: 0.10.0
Server API version: 1.10
Git commit (server): dc9c28f
Go version (server): go1.2.1
Last stable version: 0.10.0

私は認証のないプロキシサーバーの背後にいて、これが私の/etc/apt/apt.confファイルです。

Acquire::http::proxy "http://192.168.1.1:3128/";
Acquire::https::proxy "https://192.168.1.1:3128/";
Acquire::ftp::proxy "ftp://192.168.1.1:3128/";
Acquire::socks::proxy "socks://192.168.1.1:3128/";

何が悪いのですか?


6
Windowsユーザーとboot2dockerについては、stackoverflow.com
a / 29303930/6309

1
マイナーな詳細:aptはSOCKSプロキシをまったくサポートしていません。 スキームでAcquire::socks::proxy始まるすべてのURLのプロキシを設定することを意味しますsocks。にsources.listsocks://URL がないため、その行は完全に無視されます。
Hans-Christoph Steiner

どうdocker-composeですか?
Mohammad Masoumi

回答:


797

プロキシHTTPの公式Dockerドキュメントへのリンクは次のとおりです。https//docs.docker.com/config/daemon/systemd/#httphttps-proxy

簡単な概要:

まず、Dockerサービス用のsystemdドロップインディレクトリを作成します。

mkdir /etc/systemd/system/docker.service.d

次に/etc/systemd/system/docker.service.d/http-proxy.confHTTP_PROXY環境変数を追加するというファイルを作成します。

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

プロキシなしで接続する必要がある内部Dockerレジストリがある場合は、NO_PROXY環境変数を使用してそれらを指定できます。

Environment="HTTP_PROXY=http://proxy.example.com:80/"
Environment="NO_PROXY=localhost,127.0.0.0/8,docker-registry.somecorporation.com"

フラッシュの変更:

$ sudo systemctl daemon-reload

構成が読み込まれたことを確認します。

$ sudo systemctl show --property Environment docker
Environment=HTTP_PROXY=http://proxy.example.com:80/

Dockerを再起動します。

$ sudo systemctl restart docker

3
これは、Docker 1.6.2を実行しているDebian Jessieで機能します。どういうわけか編集/etc/default/dockerは機能しません。たぶんexport、Centosのドキュメントのように削除する必要があります。
2015年

2
古いSysVの場合は、docs.oracle.com / cd / E37670_01 / E37355 / html / …のように/ etc / sysconfig / dockerを編集し ます-Oracle Linux 6.7
SidJ

2
注:dockerに変更を適用するには「デーモンの再読み込み」で十分だと思いましたが、実際にsudo systemctl restart dockerは、Dockerが動作するために厳密に必要です。
Jose Alban

4
ubuntu 14.04の場合は@ n3oの回答を参照してください。ubuntu14.04ではsystemctl が利用できないためupstart、サービスの起動に使用されます。
chinmay 2016

4
今、それは「プロキシ認証が必要です」を返しています...ユーザー名とパスワードの設定方法は?
pinei

88

APTプロキシ設定はDockerとは関係ありません。

Dockerは、HTTP_PROXY環境変数を使用します(存在する場合)。例えば:

sudo HTTP_PROXY=http://192.168.1.1:3128/ docker pull busybox

ただし、代わりに、/etc/default/docker構成ファイルを確認することをお勧めします。プロキシ設定を自動的に適用するには、コメントを外す(そしておそらく調整する)行が必要です。次に、Dockerサーバーを再起動します。

service docker restart

8
私の場合、/ etc / default / dockerには小文字の例(http_proxy)が含まれていましたが、機能させるために大文字の設定(HTTP_PROXY)を追加する必要がありました。
Mekk


3
docker

1
これは、apt.dockerproject.orgからdockerをインストールするときにUbuntu 14.04で機能します。
Michael Kopp

1
これはDebian 8.8では機能せず、承認された回答
Roman Mik

60

CentOSでは、Dockerの構成ファイルは次の場所にあります。

/etc/sysconfig/docker

以下の行を追加すると、Dockerデーモンがプロキシサーバーの背後で動作するようになります。

HTTP_PROXY="http://<proxy_host>:<proxy_port>"
HTTPS_PROXY="http://<proxy_host>:<proxy_port>"

7
企業プロキシの背後にいる人のためにHTTP_PROXY = "http:// <username>:<password> @ <proxy_host>:<proxy_port>"を
エクスポートする

私にとってこれはなしでのみ機能しましたexport。これは正しいですか?
frans

4
私にとってexportは、CentOS6でのみ動作し、CentOS7では動作しません
user2363318

1
Centos7では、エクスポートを使用する必要もありませんでした
Banjocat

2
export HTTP_PROXY=...Bashismであり、非Bashシェル(/ bin / shなど)の場合、2行HTTP_PROXY=...を使用します。export HTTP_PROXY それで、私はまったく必要ありませんでしたexport
Cameron Kerr、

42

新しいDocker for Mac(またはDocker for Windows)を使用している場合は、Dockerトレイアイコンを右クリックして[ 設定](Windows:設定)を選択し、[詳細]に移動して、[プロキシ]でプロキシ設定を指定します。[ 適用して再起動]をクリックし、Dockerが再起動するまで待ちます。


私のようなmacOSで誰かがローカルにバインドされたプロキシ(たとえば127.0.0.1:8787)を使用している場合、より詳細なセットアップガイドは次のとおりです:ローカルにバインドされたプロキシが機能しない理由
Rockallite

設定をこれらのプロキシは、私のコンテナに伝播していない:私は窓を経由して、私のプロキシを設定しているstackoverflow.com/questions/48272933/...
amique

私にとっては、DNSサーバーを配置するだけで十分でした。ありがとう。
リシン

32

Ubuntuでは、クライアントプロセスではなく、Dockerデーモンのhttp_proxyを設定する必要があります。これはで行われます/etc/default/dockerここを参照)。


グループにアクセスする権限がないと表示されています。リンク。
Azizbro、

これはUbuntu 18.04以降では機能しないと思います。
zslim

27

これをCentOS 7で機能させるには、Arunの回答を拡張するために、「export」コマンドを削除する必要がありました。だから編集

/etc/sysconfig/docker

そして追加:

HTTP_PROXY="http://<proxy_host>:<proxy_port>"
HTTPS_PROXY="https://<proxy_host>:<proxy_port>"
http_proxy="${HTTP_PROXY}"
https_proxy="${HTTPS_PROXY}"

次に、Dockerを再起動します。

sudo service docker restart

ソースは、このブログ記事です


2
HTTP_PROXYのみが必要です(Fedora 20でテスト済み)。
sheldonh 2014

Suse 12に最適です!
ディーンミーハン

14

ローカルにバインドされたプロキシが機能しない理由

問題

ローカルでバインドされたプロキシを実行している場合、たとえば、でリッスンしている127.0.0.1:8989場合、Docker for Macでは機能しません。Dockerドキュメントから:

コンテナからホスト上のサービスに接続したい

MacのIPアドレスは変化しています(ネットワークにアクセスできない場合は変化しません)。現在の推奨事項は、未使用のIPをlo0Macのインターフェースに接続することです。例:sudo ifconfig lo0 alias 10.200.10.1/24、サービスがこのアドレスでリッスンしていることを確認します0.0.0.0(つまり、ではない127.0.0.1)。その後、コンテナはこのアドレスに接続できます。

Dockerサーバー側も同様です。(Dockerのサーバー側とクライアント側を理解するには、実行してみてくださいdocker version。)そして、サーバー側は独自の仮想化レイヤーで実行されますlocalhost。したがって、localhostホストOSのプロキシサーバーには接続しません。

ソリューション

したがって、私のようなローカルにバインドされたプロキシを使用している場合、基本的には、Docker for Macで動作させるために次のことを行う必要があります。

  1. プロキシサーバーがの0.0.0.0代わりにリッスンするようにし127.0.0.1ます。注意:悪意のあるアクセスを防ぐために、適切なファイアウォール設定が必要です。

  2. ループバックエイリアスをlo0インターフェイスに追加します。例10.200.10.1/24

    sudo ifconfig lo0 alias 10.200.10.1/24
    
  3. Dockerトレイメニューの[ 設定]10.200.10.1:8989からHTTPまたはHTTPSプロキシを設定します(プロキシサーバーがポートでリッスンしていると想定します8989)。

その後、ダウンロードされていないイメージから新しいコンテナーでコマンドを実行して、プロキシ設定をテストします。

$ docker rmi -f hello-world
  ...

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

c04b14da8d14: Pull complete 
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
  ...

注意:によって設定されたループバックエイリアスifconfigは、再起動後は保持されません。永続化することは別のトピックです。このブログ投稿を日本語で確認しください(Google翻訳が役立つ場合があります)。


このおかげで、会社のプロキシを介して仕事用ネットワークと外部ネットワークの両方にアクセスしようとするときに、MacでSquidManを入手するために、昨年かそこらの解決策を見つけようと努めてきました。起動時に設定されるように、これをlaunchdにフックすることでこれを固定しました。 developer.apple.com/library/content/documentation/MacOSX/...
プロクター

ありがとう。ついにあなたの投稿を見つけました!できます。cntlmを使用している場合は、構成にバインディング0.0.0.0を追加することを忘れないでください。例:0.0.0.0:8989を聞く
Felix

私もcntlmを使用しており、ゲートウェイモードに変更します
Lee Gary

10

これは私のために働いた修正です:Ubuntu、Dockerバージョン:1.6.2

ファイル/etc/default/dockerに次の行を追加します。

export http_proxy='http://<host>:<port>'

Dockerを再起動します

sudo service docker restart

Ubuntu 14.04およびMint 17.3上のDocker v1.12.1に取り組んでいます
wmarbut

1
14.04.4 + Dockerバージョン17.03.1-ceで動作し、c6d412eをビルド
okwap

8

プロキシを使用するようにDockerを構成するには、HTTPS_PROXY / HTTP_PROXY環境変数をDocker sysconfigファイルに追加する必要があります(/etc/sysconfig/docker)。

使用するinit.dかサービスツールに応じて、「export」ステートメントを追加する必要があります(Debianバグレポートログ-#767441により、/ etc / default / dockerの例は、サポートされている構文に関して誤解を招きます)。

HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTP_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"
export HTTPS_PROXY="https://<user>:<password>@<proxy-host>:<proxy-port>"

Dockerリポジトリ(Docker Hub)はHTTPSのみをサポートします。DockerをSSLインターセプトプロキシで動作させるには、プロキシルート証明書をシステムのトラストストアに追加する必要があります。

CentOSの場合、ファイルを/etc/pki/ca-trust/source/anchors/CAトラストストアにコピーして更新し、Dockerサービスを再起動します。

プロキシがNTLMv2認証を使用している場合-Cntlmなどの中間プロキシを使用して認証をブリッジする必要があります。このブログ投稿では、それについて詳しく説明しています


5

Dockerの新しいバージョンであるdocker-engineでは、systemdベースのディストリビューションで、環境変数行を/lib/systemd/system/docker.serviceに追加する必要があります。

Environment="HTTP_PROXY=http://hostname_or_ip:port/"

これはRHEL7で必要でした。
dbalakirev

[Service]セクションに行を追加します
volkit

5

Dockerをインストールしたら、次の手順を実行します。

[mdesales@pppdc9prd1vq ~]$ sudo HTTP_PROXY=http://proxy02.ie.xyz.net:80 ./docker -d &
[2] 20880

次に、プルまたは何かを実行できます。

mdesales@pppdc9prd1vq ~]$ sudo docker pull base
2014/04/11 00:46:02 POST /v1.10/images/create?fromImage=base&tag=
[/var/lib/docker|aa088847] +job pull(base, )
Pulling repository base
b750fe79269d: Download complete
27cf78414709: Download complete
[/var/lib/docker|aa088847] -job pull(base, ) = OK (0)

3

私はまだコメントすることを許可されていないので:

CentOS 7の場合、「docker.service」内でEnvironmentFileをアクティブにする必要がありました。これについては、ここで説明しています:systemdを使用してDockerを制御および構成します

編集:私はNileshによって述べられているように私のソリューションを追加しています。「/etc/systemd/system/docker.service」を開く必要があり、セクション内に追加する必要がありました

[サービス]

EnvironmentFile =-/ etc / sysconfig / docker

それから初めて、ファイル「etc / sysconfig / docker」が私のシステムにロードされました。


3

Dockerビルドのcurlに関する問題を解決するために、Dockerfile内に次のコードを追加しました。

ENV http_proxy=http://infoprx2:8080
ENV https_proxy=http://infoprx2:8080
RUN apt-get update && apt-get install -y curl vim

ENVステートメントはRUNステートメントの前にあることに注意してください。

そして、(私はboot2dockerでKitematicを使用)、インターネットにアクセスすることができるデーモンドッカーを作るために、私は次のようにを追加しました/var/lib/boot2docker/profile

export HTTP_PROXY=http://infoprx2:8080
export HTTPS_PROXY=http://infoprx2:8080

次に、Dockerをで再起動しましたsudo /etc/init.d/docker restart


3

socks5プロキシを使用している場合、Docker 17.03.1-ceを使用して「all_proxy」を設定したテストを以下に示します。

# Set up socks5 proxy server
ssh sshUser@proxyServer -C -N -g -D \
     proxyServerIp:9999 \
     -o ExitOnForwardFailure=yes \
     -o ServerAliveInterval=60

# Configure dockerd and restart.
# NOTICE: using "all_proxy"
mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/http-proxy.conf <<EOF
[Service]
Environment="all_proxy=socks5://proxyServerIp:9999"
Environment="NO_PROXY=localhost,127.0.0.1,private.docker.registry.com"
EOF

systemctl daemon-reload
systemctl restart docker

# Test whether can pull images
docker run -it --rm alpine:3.5

3

プロキシ設定を構成するためのWindowsの完全なソリューション。

< user>:< password>@< proxy-host>:< proxy-port>

Dockerアイコンの[設定]を右クリックして、[プロキシ]を直接クリックすることで、直接構成できます。

そこで、プロキシアドレス、ポート、ユーザー名、およびパスワードを設定できます。

このフォーマットでは:

< user>:< password>@< proxy-host>:< proxy-port>

例:

"geronimous:mypassword@192.168.44.55:8080"

これ以上のものはありません。


2

バージョン1.0.1では、プロキシ環境変数を設定するだけでは効果がありませんでした... /etc/default/docker.io"http_proxy"変数の正しい値でファイルを更新する必要がありました。


2

Ubuntuを使用している場合は、次のコマンドを実行してプロキシを追加します。

sudo nano /etc/default/docker

指定する行のコメントを外します

#export http_proxy = http://username:password@10.0.1.150:8050

そして、適切なプロキシサーバーとユーザー名に置き換えます。

次に、次を使用してDockerを再起動します。

service docker restart

これで、プロキシの背後でDockerコマンドを実行できます。

docker search ubuntu

2

おそらく、小文字の変数を設定する必要があります。私の場合、/ etc / systemd / system / docker.service.d / http-proxy.confファイルは次のようになります。

[Service]
Environment="ftp_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"
Environment="http_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"
Environment="https_proxy=http://<user>:<password>@<proxy_ip>:<proxy_port>/"

幸運を!:)


2

ファイアウォールの背後でも同じ問題に直面していました。以下の手順に従ってください:

$ sudo vim /etc/systemd/system/docker.service.d/http_proxy.conf
[Service]
Environment="HTTP_PROXY=http://username:password@IP:port/"

https_prxoy.confファイルを使用または削除しないでください。

Dockerコンテナをリロードして再起動します。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557*********************************8
Status: Downloaded newer image for hello-world:latest

1

Ubuntuを使用している場合は、次のコマンドを実行する必要があります。

export https_proxy=http://your_name:password@ip_proxy:port docker 

そしてDockerをリロードしてください:

service docker.io restart

または/etc/docker.ioナノで行く...


1

Docker 1.9.1がインストールされたUbuntu 14.04(Trusty Tahr)では、http_proxy行のコメントを外して値を更新し、Dockerサービスを再起動しました。

export http_proxy="http://proxy.server.com:80"

その後

service docker restart

0

RHEL6.6ではこれのみが機能します(の使用に注意してくださいexport):

/ etc / sysconfig / docker

export http_proxy="http://myproxy.example.com:8080"
export https_proxy="http://myproxy.example.com:8080"

注:どちらもhttpプロトコルを使用できます。)

https://crondev.com/running-docker-behind-proxy/に感謝


0

私のネットワークでは、Ubuntuは企業のISAプロキシサーバーの背後で動作します。また、認証が必要です。私は上記の解決策をすべて試しましたが、何の助けにもなりませんでした。実際に役立ったのは/etc/systemd/system/docker.service.d/https-proxy.conf、ドメイン名なしでファイルにプロキシ行を書き込むことでした。

の代わりに

Environment="HTTP_PROXY=http://user@domain:password@proxy:8080"

または

Environment="HTTP_PROXY=http://domain\user:password@proxy:8080"

そして、のようないくつかの他の置換@ -> %40または\ -> \\私が使用しようとしました

Environment="HTTP_PROXY=http://user:password@proxy:8080"

そしてそれは今働きます。



0

これは質問に正確に答えるものではありませんが、サービスファイルを処理したくない場合は特に、役立つかもしれません。

あなたが画像をホストしている場合、1つの方法は、サーバーで次のようなものを使用して、代わりにtarアーカイブとして画像を変換することです。

docker save <image-name> --output <archive-name>.tar

アーカイブをダウンロードして、画像に戻すだけです。

docker load <archive-name>.tar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.