【问题标题】:Docker-compose container exits with status 0Docker-compose 容器以状态 0 退出
【发布时间】:2019-12-08 12:20:11
【问题描述】:

我正在尝试为 TYPO3 创建一个 docker 环境。到目前为止,我正在使用 apache 网络服务器创建一个应用程序容器。但是容器总是以状态 0 停止。有什么提示吗? 我的 docker-compose:

version: '3'
services:
  app:
    build: ./docker/app/
    volumes:
      - ./app:/app
    ports:
      - 8080:80
      - 8443:443
    environment:
      - SERVER_NAME=local.typo3.com
  db:
    image: mysql
    build: ./docker/db/
    restart: always
    ports:
      - "3307:3306"
    environment:
      - MYSQL_ROOT_PASSWORD="root"
      - MYSQL_ROOT_USER="root"

Dockerfile 如下所示:

FROM ubuntu:18.04
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update; \
    apt-get -y upgrade; \
    echo "Europe/Berlin" > /etc/timezone; \
    ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime;

#Install apache
RUN apt-get update && \
    apt-get -y install apache2;

RUN apt-get update;

#Install php
RUN apt-get -y install php7.2 \
    php7.2-soap \
    php7.2-mysql \
    php7.2-xml \
    php7.2-cli \
    php7.2-json \
    php7.2-ldap \
    php-curl;

RUN apt-get install -y --no-install-recommends mysql-client;

COPY resources/000-default.conf /etc/apache2/sites-available/
RUN a2ensite 00-default;

CMD ["service apache2 restart"]

任何帮助将不胜感激。

【问题讨论】:

  • 调试你的问题,可以开始使用cmd apachectl -D FOREGROUND 启动apache
  • 作为一般规则,service 在 Docker 中不起作用。有一个prebuiltphp:7.2-apache 的图像,你可以直接使用它而不是自己重建它吗?

标签: docker docker-compose dockerfile docker-container


【解决方案1】:

正如 David Maze 指出的那样,这在大多数容器化环境中根本行不通:

CMD ["service apache2 restart"]

根据环境,这将执行以下两种操作之一:

  • 它可能会尝试联系systemd,它没有运行,因为你还没有启动它。你不想启动它!在容器内运行进程管理器通常是一种反模式。

  • 它将在后台启动 Apache。当这种情况发生时,从 Docker 的角度来看,主进程已经退出,因此容器退出。这可能就是发生在你身上的事情。

而不是使用service 命令,您应该手动启动Apache 在前台,例如通过运行:

httpd -DFOREGROUND

或者,按照建议,在已经具有必要功能的现有图像之上构建您的应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-30
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多