Git を使ってさまざまな楽しいことを実行するアプリ (git clone や git push の実行など) があり、それを docker 化しようとしています。
しかし、コンテナの「ユーザー」が使用できるようにコンテナに SSH キーを追加する必要があるという問題が発生しています。
にコピーし/root/.ssh/
、 を変更し$HOME
、git ssh ラッパーを作成してみましたが、まだうまくいきませんでした。
参考までに、Dockerfile を以下に示します。
#DOCKER-VERSION 0.3.4
from ubuntu:12.04
RUN apt-get update
RUN apt-get install python-software-properties python g++ make git-core openssh-server -y
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://archive.ubuntu.com/ubuntu precise universe" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install nodejs -y
ADD . /src
ADD ../../home/ubuntu/.ssh/id_rsa /root/.ssh/id_rsa
RUN cd /src; npm install
EXPOSE 808:808
CMD [ "node", "/src/app.js"]
app.js
次のようなgitコマンドを実行しますgit pull
ベストアンサー1
ビルド時に SSH を使用する必要がある場合は、さらに難しい問題になります。たとえば、 を使用している場合git clone
や、私の場合はpip
と を使用npm
してプライベート リポジトリからダウンロードする場合です。
私が見つけた解決策は、フラグを使用してキーを追加することです--build-arg
。その後、新しい実験的な--squash
コマンド (1.13 で追加) を使用してレイヤーをマージし、削除後にキーが使用できなくなるようにします。これが私の解決策です:
ビルドコマンド
$ docker build -t example --build-arg ssh_prv_key="$(cat ~/.ssh/id_rsa)" --build-arg ssh_pub_key="$(cat ~/.ssh/id_rsa.pub)" --squash .
Dockerファイル
FROM python:3.6-slim
ARG ssh_prv_key
ARG ssh_pub_key
RUN apt-get update && \
apt-get install -y \
git \
openssh-server \
libmysqlclient-dev
# Authorize SSH Host
RUN mkdir -p /root/.ssh && \
chmod 0700 /root/.ssh
# See: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints
COPY known_hosts > /root/.ssh/known_hosts
# Add the keys and set permissions
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && \
echo "$ssh_pub_key" > /root/.ssh/id_rsa.pub && \
chmod 600 /root/.ssh/id_rsa && \
chmod 600 /root/.ssh/id_rsa.pub
# Avoid cache purge by adding requirements first
ADD ./requirements.txt /app/requirements.txt
WORKDIR /app/
RUN pip install -r requirements.txt
# Remove SSH keys
RUN rm -rf /root/.ssh/
# Add the rest of the files
ADD . .
CMD python manage.py runserver
更新: Docker 1.13 を使用しており、実験的な機能が有効になっている場合は、--squash
ビルド コマンドに を追加してレイヤーをマージし、SSH キーを削除して から非表示にすることができますdocker history
。