【问题标题】:Apache2 Container on BlueMix won't stay upBlueMix 上的 Apache2 容器不会继续运行
【发布时间】: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 吗?或者至少显示ENTRYPOINTCMD 条目。
  • 用上面的脚本和 dockerfile 更新。
  • 很奇怪。您可以尝试调试并查看 exec 部分是否立即返回?您的 bash 脚本是 PID 1,因此 exec 命令不应返回,因为它会关闭。没有任何日志很难。您也可以尝试强制等待apache进程完成删除exec-DFOREGROUND并将&放在最后,然后将waitpid $!放在下一行。

标签: apache docker containers ibm-cloud dockerfile


【解决方案1】:

您正在尝试做的是获取节点映像,安装 apache 并覆盖命令,并尝试在前台运行。这并不是在 bluemix 上运行 apache 容器的好方法。

你应该这样做: 1. 按照此处的信息将 httpd 图像拉取到您的本地,将本地图像推送到您的 bluemix 名称空间。 - 码头工人拉 httpd:2.4 - 码头工人标签 httpd:2.4 registry.ng.bluemix.net//httpd - 搬运工推送registry.ng.bluemix.net//http 2. 一旦图像被推送到你的命名空间,你可以使用你的 Dockerfile 创建自定义图像,注意我假设你的网站内容在 public-html 文件夹中

FROM registry.ng.bluemix.net//httpd:2.4 COPY ./public-html/ /usr/local/apache2/htdocs/ EXPOSE 80

  1. 建立您的形象
cf ic build --tag myhttp .
  1. 运行容器:
cf ic run --name myhttp -p 80 registry.ng.bluemix.net/<yourNameSpace>/myhttp
  1. 绑定IP地址,使用
cf ic bind <IP> myhttp
  1. 使用您绑定的 IP 访问您的容器

【讨论】:

  • 我很欣赏这个答案,但这让我感到担忧。您尚未解决 BM 管道中的问题。为什么当 BM 从 dockerfile 构建时,它不会产生与我在本地构建它时相同的结果。那里应该是对称的。其次,假设我正确设置了 Apache,我应该能够从任何基础映像运行 apache 服务器。当 Docker 的重点是构建你喜欢的任何东西时,为什么有人必须从特定的 HTTPD 图像开始?
猜你喜欢
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
  • 2018-07-13
相关资源
最近更新 更多