web-dev-qa-db-ja.com

コンテナの起動時にDockerfileCMDが実行されていません

そのため、プロジェクトのDockerfileを作成し、コンテナの起動時に実行するCMDをbootstrapアプリケーションに定義しました。

Dockerfileは次のようになります

# create our mount folders and volumes
ENV MOUNTED_VOLUME_DIR=sites
RUN mkdir /$MOUNTED_VOLUME_DIR
ENV PATH=$MOUNTED_VOLUME_DIR/sbin:$MOUNTED_VOLUME_DIR/common/bin:$PATH
RUN chown -Rf www-data:www-data /$MOUNTED_VOLUME_DIR

# Mount folders
VOLUME ["/$MOUNTED_VOLUME_DIR/"]

# Expose Ports
EXPOSE 443

# add our environment variables to the server
ADD ./env /env

# Add entry point script
ADD ./start.sh /usr/bin/startContainer
RUN chmod 755 /usr/bin/startContainer

# define entrypoint command
CMD ["/bin/bash", "/usr/bin/startContainer"]

Start.shスクリプトは、適切なリポジトリのクローン作成、環境変数の設定、スーパーバイザーの起動など、いくつかのgit処理を実行します。

開始スクリプトはこれで始まります

#!/bin/bash

now=$(date +"%T")
echo "Container Start Time : $now" >> /tmp/start.txt
/usr/bin/supervisord -n -c /etc/supervisord.conf

このように新しいコンテナを起動します

docker run -d -p expoPort:contPort -t -i -v /$MOUNTED_VOLUME_DIR/$PROJECT:/$MOUNTED_VOLUME_DIR $CONTAINER_ID /bin/bash

コンテナにログインすると、スーパーバイザーが起動しておらず、nginxもphp5-fpmも起動していないことがわかります。 startContainerスクリプトからタイムスタンプが設定された/tmp/start.txtファイルは存在せず、DockerfileでCMDが実行されたことがないことを示しています。

これを修正するためのヒントは素晴らしいでしょう

9
James Kirkby

この:

docker run -d -p expoPort:contPort -t -i -v /$MOUNTED_VOLUME_DIR/$PROJECT:/$MOUNTED_VOLUME_DIR $CONTAINER_ID /bin/bash

コンテナをインスタンス化した後、「run/bin/bash」と言います。例えば。 CMDをスキップします。

これを試して:

docker run -d -p expoPort:contPort -t -i -v /$MOUNTED_VOLUME_DIR/$PROJECT:/$MOUNTED_VOLUME_DIR $CONTAINER_ID 
18
Sobrique