Dockerfileを使用してdockerイメージを構築しているときに、githubリポジトリのクローンを作成する必要があります。公開ssh鍵をgitハブアカウントに追加しました。Dockerホストからリポジトリを複製できます。 Dockerの実行時に_$SSH_AUTH_SOCK
_環境変数をdocker run --rm -it --name container_name \ -v $(dirname $SSH_AUTH_SOCK):$(dirname $SSH_AUTH_SOCK) \ -e SSH_AUTH_SOCK=$SSH_AUTH_SOCK my_image
のようにマッピングすることで、Docker Hostのsshキーを使用できることがわかります。
ドッカーのビルド中にどうすれば同じことができますか?
Dockerの新機能を使用して、既存のSSHエージェント接続またはキーをビルダーに転送できます。これにより、たとえば、ビルド中にプライベートリポジトリのクローンを作成できます。
手順:
まず、新しいBuildKitを使用するように環境変数を設定します
export DOCKER_BUILDKIT=1
次に、新しい(実験的)構文でDockerfileを作成します。
# syntax=docker/dockerfile:experimental
FROM Alpine
# install ssh client and git
RUN apk add --no-cache openssh-client git
# download public key for github.com
RUN mkdir -p -m 0600 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts
# clone our private repository
RUN --mount=type=ssh git clone [email protected]:myorg/myproject.git myproject
そして、イメージを構築します
docker build --ssh default .
詳細はこちら: https://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066
残念ながら、現在Dockerではビルド時のボリュームマウントがサポートされていないため、sshソケットをビルドコンテナーに転送できません。
これはかなり長い間議論のトピックでした、参照のためにGitHubの以下の問題を参照してください:
ご覧のとおり、この機能はさまざまなユースケースで複数回リクエストされています。これまでのところ、メンテナーはビルド中にボリュームをマウントすると移植性が損なわれると感じているため、この問題への対処をためらっていました。
ビルドの結果は、基になるホストから独立している必要があります
this の説明で概説されています。
これは、別のビルドスクリプトを使用して解決できます。たとえば、bashスクリプトを作成して、それを~/usr/local/bin/docker-compose
またはお好きな場所に配置します。
#!/bin/bash
trap 'kill $(jobs -p)' EXIT
socat TCP-LISTEN:56789,reuseaddr,fork UNIX-CLIENT:${SSH_AUTH_SOCK} &
/usr/bin/docker-compose $@
次に、Dockerfileで既存のsshソケットを使用します。
...
ENV SSH_AUTH_SOCK /tmp/auth.sock
...
&& apk add --no-cache socat openssh \
&& /bin/sh -c "socat -v UNIX-LISTEN:${SSH_AUTH_SOCK},unlink-early,mode=777,fork TCP:172.22.1.11:56789 &> /dev/null &" \
&& bundle install \
...
or any other ssh commands will works
これで、カスタムdocker-compose build
を呼び出すことができます。共有sshソケットを使用して実際のdockerスクリプトを呼び出します。
これも興味深いです:
それは次のようになります:
mkfifo myfifo
nc -lk 12345 <myfifo | nc -U $SSH_AUTH_SOCK >myfifo
RUN mkfifo myfifo
RUN while true; do \
nc 172.17.0.1 12345 <myfifo | nc -Ul /tmp/ssh-agent.sock >myfifo \
done &
RUN export SSH_AUTH_SOCK=/tmp/ssh-agent.sock
RUN ssh ...