【发布时间】:2017-06-12 06:01:43
【问题描述】:
我从 IBM 的形象开始:
registry.ng.bluemix.net/ibmnode:latest
这是 Ubuntu 14.04,然后我添加 Apache2,复制我的站点的一些文件,然后 EXPOSE 443。最后,我使用以下内容调用 bash 脚本:
#!/bin/bash
set -e
rm -f /usr/local/apache2/logs/httpd.pid
exec /usr/sbin/apache2ctl -DFOREGROUND
当我在本地运行容器时,它可以正常工作并提供我需要的东西。当 BlueMix 从 Dockerfile 构建时,它可以正常工作。然后成功部署到容器。部署后,容器立即注册为“已停止”。重新启动会使其启动,然后在几秒钟内恢复。 'cf ic logs my-process-id' 没有显示任何反馈。
我尝试过的其他事情: 入口点 ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"] 使用服务 apache2 重启
Dockerfile:
FROM registry.ng.bluemix.net/ibmnode:latest
RUN apt-get install -y apache2
RUN apt-get install -y nano
# ADD SSL
RUN a2enmod ssl
RUN a2enmod proxy_http
WORKDIR /var/www/dist
RUN mv ./* /var/www/html
COPY docker/httpd-foreground.sh /usr/local/bin/
EXPOSE 443
CMD ["httpd-foreground.sh"]
httpd-foreground.hs:
#!/bin/bash
set -e
rm -f /usr/local/apache2/logs/httpd.pid
exec /usr/sbin/apache2ctl -DFOREGROUND
【问题讨论】:
-
任何日志?容器在主应用程序 (PID 1) 停止时停止。
-
无。此外,我在本地构建了 docker 容器,将其注册到 BlueMix 注册表,将其部署到容器中,然后就可以正常工作了。所以问题仅限于在 BlueMix 构建阶段处理和构建 Dockerfile 的时间。
-
你能发布 Dockerifle 吗?或者至少显示
ENTRYPOINT和CMD条目。 -
用上面的脚本和 dockerfile 更新。
-
很奇怪。您可以尝试调试并查看 exec 部分是否立即返回?您的 bash 脚本是 PID 1,因此
exec命令不应返回,因为它会关闭。没有任何日志很难。您也可以尝试强制等待apache进程完成删除exec和-DFOREGROUND并将&放在最后,然后将waitpid $!放在下一行。
标签: apache docker containers ibm-cloud dockerfile