web-dev-qa-db-ja.com

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

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/";

何がおかしいのですか?

261
rpayanm

これはプロキシ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.confという環境変数を追加するHTTP_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
642

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

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

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

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

service docker restart
87
mbarthelemy

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

/etc/sysconfig/docker

以下の行を追加すると、Dockerデーモンをプロキシサーバーの内側で動作させるのに役立ちました。

HTTP_PROXY="http://<proxy_Host>:<proxy_port>"
HTTPS_PROXY="http://<proxy_Host>:<proxy_port>"
52
Arun Y

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

33
gkephorus

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

30
Pedro Madrid

上のArunの答えを拡張するために、これがCentOS 7で動作するようにするために、私は "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

ソースはこのブログ投稿 です。

25
zummed

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

問題

あなたがlocal-boundプロキシを実行しているなら、例えば127.0.0.1:8989を聴いていて、 Docker for Mac では動作しません。 Dockerのドキュメントから

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

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

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

ソリューション

したがって、私のようにローカルにバインドされたプロキシを使用している場合は、基本的に、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トレイメニューの設定からHTTPおよび/またはHTTPSプロキシを10.200.10.1:8989に設定します(プロキシサーバーがポート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
  ...

Notice: ifconfigで設定されたループバックエイリアスは再起動後も保持されません。それを永続的にすることは別のトピックです。 このブログ記事 日本語で確認してください(Google翻訳で解決する場合があります)。

12
Rockallite

これは私にとってうまくいった修正です:Ubuntu、Dockerバージョン:1.6.2

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

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

Dockerを再起動します

Sudo service docker restart
9
n3o

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

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 のような中間プロキシを使用して認証をブリッジする必要があります。 このブログ投稿では詳細を説明しています

8

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)
4

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

Environment="HTTP_PROXY=http://hostname_or_ip:port/"
3
Mehdi Hamidi

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ステートメントの前にあることに注意してください。

そしてDockerデーモンがインターネットにアクセスできるようにするために(私はboot2dockerでKitematicを使用します)、/var/lib/boot2docker/profileに以下を追加しました。

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

それから私はSudo /etc/init.d/docker restartでDockerを再起動しました。

3

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

2
Richil

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
2
btpka3

Ubuntuを使用している場合は、これらのコマンドを実行してプロキシを追加してください。

Sudo nano /etc/default/docker

そして指定した行のコメントを外します

#export http_proxy = http://username:[email protected]:8050

そしてそれをあなたの適切なプロキシサーバーとユーザー名に置き換えてください。

その後、Dockerを再起動します。

service docker restart

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

docker search ubuntu
2
Gary Mendonca

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

[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

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

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

Dockerアイコンで[設定]を右クリックしてから[プロキシ]を選択すると、直接設定できます。ここで、プロキシアドレス、ポート、ユーザー、およびパスワードを構成できます。この形式では:

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

例:

"geronimous:[email protected]:8080"

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

1
user2280949

Docker 1.9.1を搭載したUbuntu 14.04(Trusty Tahr)では、http_proxy行のコメントを外し、値を更新してからDockerサービスを再開しました。

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

その後

service docker restart
1
Neo

Ubuntuを使用している場合は、次のコマンドを実行してください。

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

そしてDockerをリロードします。

service docker.io restart

またはnanoで/etc/docker.ioに移動してください...

1
koff75

私はまだコメントすることはできませんので:

CentOS 7では、ここに記述されているように、 "docker.service"内でEnvironmentFileをアクティブにする必要がありました。 systemd でDockerを制御および設定する.

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

[サービス]

EnvironmentFile = - /etc/sysconfig/docker

その時になって初めて私のシステムに "etc/sysconfig/docker"ファイルがロードされました。

1

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
vaughan

私のネットワークでは、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
Dmitry Polyakov

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

$ 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
0
abhishek pant

これを試して:

Sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d & 
0
Abdennour TOUMI