Docker-compose容器退出,状态为0

问题描述 投票:0回答:1

我正在尝试为TYPO3创建一个docker环境。到目前为止,我正在使用apache webserver创建一个应用程序容器。但是容器始终以状态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"]

任何帮助将不胜感激。

docker docker-compose dockerfile docker-container
1个回答
0
投票

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

CMD ["service apache2 restart"]

取决于环境,这将执行以下两项操作之一:

  • 它可以尝试与systemd联系,因为您尚未启动它,所以它没有运行。您不想启动它!在容器内运行流程管理器通常是一种反模式。

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

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

httpd -DFOREGROUND

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

© www.soinside.com 2019 - 2024. All rights reserved.