【问题标题】:Dockerfile CMD not running at container startDockerfile CMD 未在容器启动时运行
【发布时间】:2016-02-08 13:10:08
【问题描述】:

所以我已经为一个项目编写了一个 Dockerfile,我已经定义了一个 CMD 以在启动容器时运行以引导应用程序。

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 工作,例如克隆正确的 repo、设置环境变量以及启动主管。

启动脚本以此开头

#!/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。

任何解决此问题的提示都会很棒

【问题讨论】:

  • 您在docker run 中用/bin/bash 替换CMD,所以启动脚本没有运行是“正常的”

标签: bash docker boot2docker dockerfile


【解决方案1】:

这个:

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

在实例化容器后说“运行 /bin/bash”。例如。跳过CMD

试试这个:

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

【讨论】:

  • 谢谢你是对的,以为你仍然需要将 bash 传递到启动容器中
  • 这是一种覆盖默认值的便捷方式。以bash 开始,运行脚本,检查配置等,然后作为守护进程使用启动脚本运行。
猜你喜欢
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 2021-08-19
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多