gpt4 book ai didi

php - PHP Docker容器无故退出

转载 作者:行者123 更新时间:2023-12-02 20:45:48 27 4
gpt4 key购买 nike

我对docker和docker-compose相对较新,所以我制作了此文件

version: '3'
services:
web:
image: nginx:latest
ports:
- "8050:80"
volumes:
- ./code:/code
- ./site.conf:/etc/nginx/conf.d/default.conf
links:
- php
php:
image: php:7.3-fpm-alpine3.9
command: apk --update add php7-mysqli
volumes:
- ./code:/code
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: example

adminer:
image: adminer
restart: always
ports:
- 8080:8080

由于某种原因
command: apk --update add php7-mysqli

无故停止php容器,只打印 dock_php_1 exited with code 0
因此,我的Web容器也停止了并且服务无法正常工作

问题的核心是什么以及如何解决?

最佳答案

这是因为您要告诉容器在启动时运行apk update命令,此操作将完成并以有效的退出代码0退出。

为了使其能够运行该apk更新命令并仍然使用php容器,您需要使用自己的构建扩展php镜像,以创建基本php镜像的自己的“自定义镜像”(有点像扩展PHP类),并且然后将该apk更新作为dockerfile的一部分运行。

这相当容易做到,您的dockerfile看起来像:

FROM php:7.3-fpm-alpine3.9

RUN apk --update add php7-mysqli

您可以将其另存为 ./php/Dockerfile
然后更新您的 docker-compose.yml文件说:
...
php:
build: ./php
volumes:
...

删除命令:部分

然后,这将在 docker-compose up上,在其中包含apk更新的扩展镜像上,作为容器的额外层,并继续运行原始镜像提供的标准php命令。

这是 build:指令的文档,因为您可以使用它来做很多其他很棒的事情,
例如,如果您不想将其放置在子目录中,则指定Dockerfile;如果要将文件烘烤到新镜像中,请提供 context: https://docs.docker.com/compose/compose-file/#build

关于php - PHP Docker容器无故退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54599413/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com