web-dev-qa-db-ja.com

Dockerfileでgitインストールが失敗する

Dockerビルドの実行中に作業しているリポジトリをプルしようとしているので、 このチュートリアル に従って、Dockerfileに追加しました

# this is our first build stage, it will not persist in the final image
FROM ubuntu as intermediate

# install git
RUN apt-get update \
    apt-get upgrade \
    apt-get install git

# add credentials on build
RUN mkdir ~/.ssh && ln -s /run/secrets/Host_ssh_key ~/.ssh/id_rsa

# make sure your domain is accepted
RUN touch /root/.ssh/known_hosts
RUN ssh-keyscan github.org >> /root/.ssh/known_hosts

RUN git clone [email protected]:my-repo/myproject.git

FROM ubuntu
# copy the repository form the previous image
COPY --from=intermediate /your-repo /srv/your-repo

docker-compose.ymlに追加しました

secrets:
  Host_ssh_key:
    file: ~/.ssh/id_rsa

そして私は追加しています

secrets:
  - Host_ssh_key

サービスの1つ。

これはローカルでの使用に限られているため(本番環境に展開または使用する予定はありません。テストするだけです)、この方法で使用しても構いません-現在ビルドが失敗するために動作する場合エラーのあるgitインストールステージ

E:更新コマンドは引数を取りません

エラー:サービス 'web'の構築に失敗しました:コマンド '/ bin/sh -c apt-get update apt-get upgrade apt-get install git'はゼロ以外のコードを返しました:100

私は何が欠けていますか?

11
dingo_d

これを分析しすぎています。単純なタイプミスです。する必要があります:

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y git

これらは3つの個別のコマンドです。

24
Alex Karshin

いくつかの考え:

    1. apt-get install gitapt-get install --assume-yes gitに置き換えます。 --assume-yesがなければ、確認を求めるプロンプトが表示されますが、これを与えることはできず、それを理解して「NO」を意味すると仮定するのに十分賢明です。
    1. Sshキーを追加しましたが、0600であることを確認しました。それをコピーして、具体的にはchmod 0600 ~/.ssh/id_rsaだけを確認します。

全体として、あなたのDockerfileは非常に賢く見え、私はそれを読んで新しいアイデアを得ました。

5
emory