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/";
何がおかしいのですか?
これはプロキシ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
あなたのAPTプロキシ設定はDockerとは関係ありません。
Dockerは、存在する場合はHTTP_PROXY環境変数を使用します。例えば、
Sudo HTTP_PROXY=http://192.168.1.1:3128/ docker pull busybox
代わりに、/etc/default/docker
configurationファイルを見てみることをお勧めします。プロキシ設定を自動的に適用するには、コメントを外す(そしておそらく調整する)行を用意する必要があります。次にDockerサーバーを再起動します。
service docker restart
CentOSでは、Dockerの設定ファイルは次の場所にあります。
/etc/sysconfig/docker
以下の行を追加すると、Dockerデーモンをプロキシサーバーの内側で動作させるのに役立ちました。
HTTP_PROXY="http://<proxy_Host>:<proxy_port>"
HTTPS_PROXY="http://<proxy_Host>:<proxy_port>"
Ubuntuでは、クライアントプロセスではなく、Dockerデーモンにhttp_proxyを設定する必要があります。これは/etc/default/docker
で行われます( here を参照)。
新しい Docker for Mac (または Docker for Windows )を使用している場合は、Dockerトレイアイコンを右クリックして 設定 (Windows:設定)を選択し、次に進みます。 [詳細設定]をクリックし、[プロキシ]でプロキシ設定を指定します。 適用と再起動 をクリックして、Dockerが再起動するまで待ちます。
上の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
ソースはこのブログ投稿 です。
あなたが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で機能させるために次のことを行う必要があります。
プロキシサーバーに0.0.0.0
ではなく127.0.0.1
をリッスンさせるようにします。 注意: 悪意のあるアクセスを防ぐために適切なファイアウォールの設定が必要です。
ループバックエイリアスをlo0
インターフェースに追加します。 10.200.10.1/24
:
Sudo ifconfig lo0 alias 10.200.10.1/24
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翻訳で解決する場合があります)。
これは私にとってうまくいった修正です:Ubuntu、Dockerバージョン:1.6.2
ファイル/etc/default/docker
に、次の行を追加します。
export http_proxy='http://<Host>:<port>'
Dockerを再起動します
Sudo service docker restart
プロキシで動作するように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 のような中間プロキシを使用して認証をブリッジする必要があります。 このブログ投稿では詳細を説明しています 。
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)
systemd ベースのディストリビューションのDockerの新しいバージョンでは docker-engine が、 /lib/systemd/system/docker.service に環境変数の行を追加する必要があります。他の人が言っているように:
Environment="HTTP_PROXY=http://hostname_or_ip:port/"
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を再起動しました。
プロキシ環境変数を設定しただけではバージョン1.0.1では役に立ちませんでした... "http_proxy"変数の正しい値で/etc/default/docker.io
ファイルを更新する必要がありました。
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
Ubuntuを使用している場合は、これらのコマンドを実行してプロキシを追加してください。
Sudo nano /etc/default/docker
そして指定した行のコメントを外します
#export http_proxy = http://username:[email protected]:8050
そしてそれをあなたの適切なプロキシサーバーとユーザー名に置き換えてください。
その後、Dockerを再起動します。
service docker restart
これで、プロキシの背後でDockerコマンドを実行できます。
docker search ubuntu
おそらくあなたは小文字の変数を設定する必要があります。私の場合、私の /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>/"
がんばろう! :)
プロキシ設定を構成するためのWindows用の完全なソリューション。
< user>:< password>@< proxy-Host>:< proxy-port>
Dockerアイコンで[設定]を右クリックしてから[プロキシ]を選択すると、直接設定できます。ここで、プロキシアドレス、ポート、ユーザー、およびパスワードを構成できます。この形式では:
< user>:< password>@< proxy-Host>:< proxy-port>
例:
"geronimous:[email protected]:8080"
これ以上のものはありません。
Docker 1.9.1を搭載したUbuntu 14.04(Trusty Tahr)では、http_proxy
行のコメントを外し、値を更新してからDockerサービスを再開しました。
export http_proxy="http://proxy.server.com:80"
その後
service docker restart
Ubuntuを使用している場合は、次のコマンドを実行してください。
export https_proxy=http://your_name:password@ip_proxy:port docker
そしてDockerをリロードします。
service docker.io restart
またはnanoで/etc/docker.io
に移動してください...
私はまだコメントすることはできませんので:
CentOS 7では、ここに記述されているように、 "docker.service"内でEnvironmentFileをアクティブにする必要がありました。 systemd でDockerを制御および設定する.
編集:私はNileshによって述べられているように私のソリューションを追加しています。 "/etc/systemd/system/docker.service"を開く必要があり、セクション内に追加する必要がありました
[サービス]
EnvironmentFile = - /etc/sysconfig/docker
その時になって初めて私のシステムに "etc/sysconfig/docker"ファイルがロードされました。
RHEL6.6でこれだけが動作します(export
の使用に注意してください)。
/etc/sysconfig/docker
export http_proxy="http://myproxy.example.com:8080"
export https_proxy="http://myproxy.example.com:8080"
注:どちらもhttp
プロトコルを使用できます。)
私のネットワークでは、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"
そしてそれは今うまくいきます。
私もファイアウォールの背後にある同じ問題に直面していました。以下の手順に従ってください。
$ 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
これを試して:
Sudo HTTP_PROXY=http://<IP address of proxy server:port> docker -d &