docker - 来自 RUN apache reload 的 docker-compose up 上存在的 Docker 容器
问题描述
我有一个 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
码头工人-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:
下面是输出
$ 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
的行的情况下运行,然后从构建的容器中运行 reload 命令,一切看起来都很好。# service apache2 reload
如何在不退出的情况下从 Dockerfile 重新加载 apache?
解决方案
您可以安全地从 Dockerfile 中删除该行。
一个 Docker 镜像只包含一个文件系统和一些相关的元数据。它不包含任何正在运行的进程;没有“服务”,也没有任何东西可以从 Dockerfile 的上下文中“重新启动”。
一个容器通常只运行一个进程。在大多数情况下,您会使用指令指定这是什么CMD
,并且它将运行一些单个命令作为前台进程。类似service
或systemctl
大多数命令在 Docker 中根本不起作用,也不是必需的:如果您需要重新启动主容器进程,您只需删除并重新创建容器。在php:...-apache
Docker Hub 镜像的特定情况下,这在基础镜像中提供Dockerfile
;所以当你docker run
镜像时,它会在一个干净的环境中启动一个新的 Apache 服务器。
推荐阅读
- firebase - 如何在 Firebase 上连续运行代码并创建所有人都可以访问的数据?
- reporting-services - 参数的动态日期
- vue.js - RangeError: 超出最大调用堆栈大小 | Vue.js
- assembly - 汇编 x86_64 显示残值
- ruby - ruby bsearch,查找最后一次出现
- javascript - 反应开关常量
- c# - 找到了多个具有相同 ID“controlID”但不存在的控件
- html - 似乎无法在图像上找到文本的问题,尝试在父元素上使用真实和绝对定位,但没有任何效果
- c++ - 如何将 $ 符号添加到 Code::Blocks 中的默认代码?
- java - Android Studio 运行时错误 - 致命异常:主要“无法启动活动”