我正在尝试创建一个将自动启动apache的Dockerfile。没事。但是,如果我登录到容器并运行service apache2 start
它就可以了。为什么我不能从Dockerfile运行该命令?
FROM ubuntu
# File Author / Maintainer
MAINTAINER rmuktader
# Update the repository sources list
RUN apt-get update
# Install and run apache
RUN apt-get install -y apache2 && apt-get clean
#ENTRYPOINT ["/usr/sbin/apache2", "-k", "start"]
#ENV APACHE_RUN_USER www-data
#ENV APACHE_RUN_GROUP www-data
#ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD service apache2 start
问题出在这里:CMD service apache2 start
执行此命令时,进程apache2
将与外壳分离。但是Docker仅在主进程处于活动状态时才能工作。
解决方案是在 前台 运行Apache 。Dockerfile
必须看起来像这样:(仅更改了最后一行)。
FROM ubuntu
# File Author / Maintainer
MAINTAINER rmuktader
# Update the repository sources list
RUN apt-get update
# Install and run apache
RUN apt-get install -y apache2 && apt-get clean
#ENTRYPOINT ["/usr/sbin/apache2", "-k", "start"]
#ENV APACHE_RUN_USER www-data
#ENV APACHE_RUN_GROUP www-data
#ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD apachectl -D FOREGROUND
问题内容: 假设我有一个要运行的Docker容器,那么我可以调用 一切都很好。如果系统崩溃并重新启动,是否有内置的方式来运行容器,使其能够自动重新启动? 如果是这样,这在Docker Compose中也可用吗? 问题答案: 是的,docker具有重启策略,该策略可以处理此问题。这也可以在compose.yml配置文件中找到。
假设我有一个要运行的Docker容器,然后我可以调用 一切都很好。是否有一种内置方法可以运行容器,以便在系统崩溃并重新启动时自动重新启动容器? 如果是这样,这在 Docker Compose 中是否也可用?
问题内容: 假设重新启动操作系统时,通过init.d或类似systemd的进程自动重启了Docker守护进程,那么重启一个或多个Docker容器的首选方式是什么?例如,我可能在反向代理或数据库服务器后面有许多Web服务器。 问题答案: CoreOS使用systemd来管理长期运行的服务: https://coreos.com/os/docs/latest/getting-started-with-
问题内容: 要启动容器,我输入以下命令: 但我想在此容器中打开外壳以键入mongo命令。我应该运行什么命令来执行相同的操作? 问题答案: 您可以通过运行以下命令来运行交互式mongo shell: 否则,如果您的容器已经在运行,则可以使用以下命令:
问题内容: 我可以使用启用自动重启功能,但是在停止容器后,如何关闭该属性? 我通常会运行网络服务器,通常会映射端口80: 但是有时候我想运行映像的较新版本,但又想保留旧容器。问题是,如果有多个带有的容器,则只会启动其中一个(随机?),因为它们都争用主机上的端口80。 问题答案: 您可以使用该选项(如@Shibashis所述),或更新重启策略(这需要docker 1.11或更高版本); 请参阅文档以