我有一个图像定义如下:
php-enc:
container_name: php-apache
image: php:8.0-apache
volumes:
- ./php/src:/var/www/html/
ports:
- 8000:80
depends_on:
- db
现在我想在构建这个容器后在容器中运行一个命令。
docker exec -it php-apache bash
这将我带入容器,我使用另一个命令
docker-php-ext-install mysqli
在此之后,mysqli被安装到php-apache容器中。
现在我想将所有这些都包含到docker-compose文件中,所以我尝试了
一个三个三个一个
但它不工作。容器停止运行
我想知道如何在docker-compose.yml中使用command
2条答案
按热度按时间62lalag41#
您docker-composer.yml文件中的命令应该如下所示:
为什么你的php-apache停止运行,原因是:
命令:
sh -c "docker-php-ext-install mysqli"
不会在后台运行,这是容器保持运行所必需的6l7fqoea2#
您应该在Dockerfile中运行任何安装和设置命令。这将为您提供包含应用程序依赖项的自定义映像。
最小的形式将包含一个Dockerfile,其中只有一个带有当前图像名称的
FROM
行,然后RUN
您需要的任何命令。**确保从Compose文件中删除
image:
行。**保留它显然可以工作,但用您构建的内容替换实际的php:8.0-apache
映像,这会导致稍后的混乱结果。还可以考虑使用Dockerfile
COPY
指令在映像中包含应用程序代码这还将允许您从Compose文件中删除
volumes:
,并为您提供一个自包含的可运行映像。您可以将该映像推送到注册表并在其他地方运行它,而无需单独复制应用程序代码。这也意味着,如果不重建映像,主机系统上的编辑将无法在容器中看到(这在大多数编译语言中是一个正常的工作流程,但在PHP中可能不是这样)。还有其他Dockerfile指令,如
EXPOSE
和CMD
,但这里不需要它们;从基本映像继承关于如何运行主容器进程的信息。