たとえば、Firefoxを使用して、組み込みのdocker-pull
を使用せずにDockerイメージ/コンテナーをダウンロードする方法はありますか。
会社のファイアウォールとプロキシによってブロックされており、そこに穴を開けることができません。
私の問題は、Dockerを使用して画像を取得できないことです。つまり、ファイアウォールによってブロックされているため、Dockerの保存/プルやその他のDocker提供の機能です。
代替案-これは、組織で couchbase でプロキシによってブロックされたイメージに対して行ったことです。
~$ $ docker save couchbase > couchbase.tar
~$ ls -lh couchbase.docker
-rw------- 1 vikas devops 556M 12 Dec 21:15 couchbase.tar
~$ xz -9 couchbase.tar
~$ ls -lh couchbase.tar.xz
-rw-r--r-- 1 vikas staff 123M 12 Dec 22:17 couchbase.tar.xz
次に、圧縮されたtarボールをDropboxにアップロードし、作業用マシンにダウンロードしました。何らかの理由でDropboxが開いていました:)
$ docker load < couchbase.tar.xz
参考文献
私は自分でこの問題に対処しなければなりませんでした-インターネットにアクセスできる制限されたマシンからイメージをダウンロードしますが、Dockerクライアントを備えた別の制限されたマシンで使用するDockerクライアントはありませんが、インターネットにアクセスできません。質問を DevOps Stack Exchangeサイト に投稿しました:
Dockerコミュニティの助けを借りて、問題の解決策を見つけることができました。以下は私の解決策です。
つまり、 Moby Project には Moby GitHubアカウント にシェルスクリプトがあり、このスクリプトは Docker Hub Dockerにインポートする:
スクリプトの使用構文は次のとおりです。
download-frozen-image-v2.sh target_dir image[:tag][@digest] ...
その後、画像をtar
およびdocker load
でインポートできます。
tar -cC 'target_dir' . | docker load
スクリプトが期待どおりに機能することを確認するために、Docker HubからUbuntuイメージをダウンロードし、Dockerにロードしました。
user@Host:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest
user@Host:~$ tar -cC 'ubuntu' . | docker load
user@Host:~$ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#
実際には、最初にインターネットクライアント(Dockerがインストールされているnotを行う)からターゲット/宛先マシン(これはdoesDockerがインストールされている):
user@nodocker:~$ bash download-frozen-image-v2.sh ubuntu ubuntu:latest
user@nodocker:~$ tar -C 'ubuntu' -cf 'ubuntu.tar' .
user@nodocker:~$ scp ubuntu.tar user@hasdocker:~
次に、ターゲットホストでイメージをロードして使用します。
user@hasdocker:~ docker load ubuntu.tar
user@hasdocker:~ docker run --rm -ti ubuntu bash
root@1dd5e62113b9:/#
まず、Dockerデーモンがプロキシを使用するように構成されているかどうかを確認します。たとえば、boot2dockerとdocker-machineでは、 これはdocker-machine createで実行されます で、--engine-env
オプションを使用します。
これが単なる証明書の問題である場合(つまり、FirefoxがDocker Hubにアクセスする場合)、 その証明書を試してインストールする :
openssl s_client -connect index.docker.io:443 -showcerts /dev/null | openssl x509 -outform PEM > docker.pem
Sudo cp docker.pem /etc/pki/ca-trust/source/anchors/
Sudo update-ca-trust
Sudo systemctl restart docker
Sudo docker run hello-world
他の回避策(推奨されるソリューションではありません) --insecure-registry
を使用して証明書に依存せずにDocker Hubにアクセスします :
ファイアウォールがDockerプルをアクティブにブロックしている場合、FirefoxからDocker Hubにアクセスすることさえできない場合、 docker save
/docker load
イメージアーカイブが必要です。 Docker Hubにアクセスしたマシン(およびdocker pullが成功したマシン)から保存します。 (もちろん、ITシステム管理者の承認後に)企業のマシンにロードします。
注:多くの場合、ダウンロードする必要がある他の画像の上に基づいているため、画像を簡単に「ただ」ダウンロードすることはできません。それがdocker pull
があなたのためにすることです。そして、それがdocker save
も行うことです(all必要な画像で構成される1つのアーカイブを作成します)。
OP Ephreal が追加されます コメント内 :
[I] corpのイメージも機能しませんでした。しかし、私はDockerファイルをダウンロードし、自分自身を最初からイメージを再作成できることを発見しました。これは、イメージのダウンロードと本質的に同じです。
OSに依存しないソリューションを持つためにpythonスクリプトを適応しました: docker-drag
そのように使用すると、docker load
を使用してインポートできるTARアーカイブが作成されます。
python docker_pull.py hello-world
python docker_pull.py Alpine:3.9
python docker_pull.py kalilinux/kali-linux-docker
そのため、定義上、Dockerデーモンはレイヤーを1つずつ組み立てるため、実際にはDockerプルクライアントコマンドはDockerデーモンと通信する必要があります。
POSTリクエストと考えてください-Dockerデーモン自体の状態の変化を引き起こしています。プルするときに、HTTPを介して何かを「プル」することはありません。
DockerレジストリからRESTを介してすべての個々のレイヤーをプルできますが、実際にはプルと同じセマンティクスではありません。プルは、デーモンにすべての気になる画像のレイヤー。
会社のファイアウォール(およびポリシー)がリモートSSHサーバーへの接続を許可している場合は、別の選択肢があります。その場合、単純にSSHトンネルを設定して、トラフィックをDockerレジストリにトンネリングできます。