簡體   English   中英

Docker 容器存在於 `docker-compose up` 從運行 apache 重新加載

[英]Docker container existing on `docker-compose up` from RUN apache reload

我有一個 docker-compose.yml 和一個 Dockerfile,但是在docker-compose up它在到達service apache2 reload時退出。

Dockerfile

# Base image
FROM php:7.2.1-apache

# Run apt update and install some dependancies needed for docker-php-ext
RUN apt update && apt install -y libpng-dev libicu-dev zip unzip libxml2-dev sendmail

# Install PHP extensions
RUN docker-php-ext-install mysqli gd intl zip xmlrpc soap opcache

# Reload apache
RUN service apache2 reload

docker-compose.yml

version: "3"
services:
    web:
        build: ./docker/php-apache
        # image: moodle:php:7.2.1-apache
        # volumes:
        #   - ./public_html:/var/www/html
        ports:
          - "8080:80"
        links:
            - "mariadb"

    mariadb:
        image: mariadb:10.2.33
        volumes:
            - mariadb:/var/lib/mysql
        environment:
            TZ: "Europe/Rome"
            MYSQL_ALLOW_EMPTY_PASSWORD: "no"
            MYSQL_ROOT_PASSWORD: "rootpwd"
            MYSQL_USER: "moodle"
            MYSQL_PASSWORD: "moodle"
            MYSQL_DATABASE: "moodle"

volumes:
    mariadb:

下面是output是什么

$ docker-compose up
...
Step 5/5 : RUN service apache2 reload
Reloading Apache httpd web server: apache2 failed!
ERROR: Service 'web' failed to build: The command '/bin/sh -c service apache2 reload' returned a non-zero code: 1

看到我的容器已退出並停止。

但是,如果我運行docker-compose up注釋掉# service apache2 reload行,然后從構建的容器中運行 reload 命令,一切看起來都正常。

如何在不退出的情況下從 Dockerfile 重新加載 apache?

您可以安全地從 Dockerfile 中刪除該行。

一個 Docker 圖像只包含一個文件系統和一些相關的元數據。 它不包含任何正在運行的進程; 沒有“服務”,也沒有什么可以從 Dockerfile 的上下文中“重新啟動”。

一個容器通常只運行一個進程。 在大多數情況下,您會使用CMD指令指定這是什么,它會作為前台進程運行一些單個命令。 servicesystemctl之類的命令在 Docker 中大多根本不起作用,也不是必需的:如果需要重新啟動主容器進程,只需刪除並重新創建容器即可。 php:...-apache Docker Hub 圖像的特定情況下,這是在基本圖像Dockerfile中提供的 所以當你docker run圖像時,它會在一個干凈的環境中啟動一個新的 Apache 服務器。

請將RUN service apache2 reload CMD service apache2 restart

您不得在鏡像構建中運行服務,它們必須在容器啟動時運行。 CMD在用戶啟動容器時執行。 如果您在構建時使用 RUN 服務,那么它會卡住或失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM