web-dev-qa-db-ja.com

Dockerエントリーポイントとcmdを一緒に

エントリーポイントとcmdの両方でDockerをセットアップしようとしています。

FROM debian:stretch
RUN apt-get update && \
apt install gnupg ca-certificates -y 
RUN echo "deb http://repo.aptly.info/ squeeze main" > /etc/apt/sources.list.d/aptly.list
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 9E3E53F19C7DE460
RUN apt update && apt install aptly -y
ADD aptly.conf /etc/aptly.conf
ADD start.sh .
VOLUME ["/aptly"]
ENTRYPOINT ["/start.sh"]
CMD ["aptly", "api", "serve"]

しかし、エントリポイントスクリプトは停止していません... cmdコマンドが起動していません

ここに私のスクリプト:

#!/bin/bash
 set -e 
 init_aptly() { 
 #import pgp key
#create nginx root folder in /aptly
su -c "mkdir -p /aptly/.aptly/public"
echo "12"
 #initialize repository
 #aptly create repo doze-server -   distribution="stable"
  }
  #check for first run
 if [ ! -e /aptly/.aptly/public ]; then
  init_aptly
  echo "13"
 fi
  echo "14"

スクリプトは常に14をエコーし​​ます。1つだけ希望し、それからdockerfileからcmdコマンドを実行します

10
Vana

エントリポイントとコマンドの両方を使用すると、コマンドセクションがエントリポイントの実行可能ファイルに引数として追加されます。したがって、あなたの場合:

ENTRYPOINT ["/start.sh"]
CMD ["aptly", "api", "serve"]

実行と同等です:

ENTRYPOINT["/start.sh", "aptly", "api", "serve"]
15
yamenk

エントリポイントが何をするのかを知らない限り、多くを伝えることはできませんが、基本的に、これは、エントリポイントとcmdのこの組み合わせを使用して行っていることです。

/start.sh aptly api serve

サーバーを起動しただけの場合は、次のようにすることができます(aptly実行可能ファイルへの有効なパスが必要な場合があります):

ENTRYPOINT ["aptly"]
CMD ["api", "serve"]

実行可能ファイルを実行するだけではない場合を除き、エントリポイントは必要ありません。

3
emix