我正在构建一个PHP Apache Web 服务 Docker 容器原型。
- 第一种也是最简单的方法是使用WordPress
发布的官方图片创建一个容器, 简单Dockerfile
如下:
FROM wordpress:latest
哪个构建但无法运行:
# docker run -it wordpress_local apache2-foreground
WordPress not found in /var/www/html - copying now...
Complete! WordPress has been successfully copied to /var/www/html
AH00534: apache2: Configuration error: No MPM loaded.
这是一个无法修复的已知错误。所以图像坏了。
其他类似的图像php7-apache2
也会产生相同的错误。
- 无法找到实际运行的预构建映像,我开始从头开始构建映像。它包含
- 高山 Linux 3.12
- 阿帕奇 2.4
- PHP 7.3
与Dockerfile
:
# cat Dockerfile
FROM alpine:3.12
RUN apk add apache2 php7 php7-apache2
ADD html/ /var/www/html/
WORKDIR /var/www/html/
CMD ["httpd", "-DNO_DETACH -DFOREGROUND -e debug"]
和一个docker-compose.yml
:
# cat docker-compose.yml
version: '3'
services:
web:
image: php_web_alpine
build: .
ports:
- "8081:8081"
这很好地构建:
# docker build -t php_web_alpine .
Sending build context to Docker daemon 7.68 kB
Step 1/5 : FROM alpine:3.12
---> a24bb4013296
Step 2/5 : RUN apk add apache2 php7 php7-apache2
---> Using cache
---> bf59e0c43f1f
Step 3/5 : ADD html/ /var/www/html/
---> 0fe4bfd871b2
Removing intermediate container cec9de242174
Step 4/5 : WORKDIR /var/www/html/
---> 03d3fe0a077f
Removing intermediate container b1763eb3e56b
Step 5/5 : CMD httpd -DNO_DETACH -DFOREGROUND -e debug
---> Running in 4ca69abc9f52
---> e3a33ae6e028
Removing intermediate container 4ca69abc9f52
Successfully built e3a33ae6e028
但是由于一个简单的配置错误而无法运行:
# docker-compose up
Recreating phpalpine_web_1 ... done
Attaching to phpalpine_web_1
web_1 | AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.20.0.2. Set the 'ServerName' directive globally to suppress this message
phpalpine_web_1 exited with code 0
它只需要httpd.conf
用正确的值填充配置文件。
那么,如何在构建时填写 Web 服务配置文件( Apache和PHP等...)以获得良好的可重现构建?