【问题标题】:Is there anyway to start docker container without a service?无论如何要在没有服务的情况下启动 docker 容器吗?
【发布时间】:2020-09-04 13:49:10
【问题描述】:

我有一个 php 容器,每次启动容器时都需要启动 php-fpm。现在由于 php-fpm 配置文件中的错误配置,导致 fpm 无法启动,因此容器无法启动。无论如何我可以在没有 php-fpm 的情况下启动容器以便修复配置文件? 容器报错如下:

[04-Sep-2020 13:47:30] ERROR: [/usr/local/etc/php-fpm.conf:7] value is NULL for a ZEND_INI_PARSER_ENTRY

[04-Sep-2020 13:47:30] ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf'

[04-Sep-2020 13:47:30] ERROR: FPM initialization failed

【问题讨论】:

  • 我通常会使用复制到容器中的正确文件重新创建容器。这意味着当我需要复制或删除容器时,我使用的过程无需手动更改即可工作。
  • 感谢您的评论,但除了重新创建容器之外没有其他方法了吗?
  • 也许stackoverflow.com/a/43494442/1213708 上的一些信息可能有助于获取容器中的外壳。
  • 你现在如何启动容器?基于什么图像?您可以在启动时覆盖主容器命令(例如,获取交互式调试 shell)。
  • 使主容器命令为bashsh,而不是图像中的php-fpm 默认值。你现在如何启动容器?

标签: php docker containers


【解决方案1】:

有两种方法可以修复图像。由于找不到图片digitalocean/php,我将在示例中使用php:7.4-fpm

第一种方式: 从容器中复制文件并使用它来构建您自己的图像:

创建 Dockerfile:

FROM php:7.4-fpm

COPY ./php-fpm.conf /usr/local/etc/php-fpm.conf

然后:

docker run --detach --name php php:7.4-fpm tail -f /dev/null
docker cp php:/usr/local/etc/php-fpm.conf php-fpm.conf
docker stop php
docker rm -v php
# Edit php-fpm.conf
docker build --tag myphp-fm .
docker run --detach --name php myphp-fpm

然后你就可以根据固定图像运行容器了。


第二种方式:

使用损坏的映像运行 shell,修复文件并使用 shell 容器创建新映像

docker run -it --name php php:7.4-fpm bash
# Edit /usr/local/etc/php-fpm.conf
# If you install any additional tools remember to remove them afterwards
# and clean any cache's
# Once you're done exit the shell, thus stopping the container
docker commit -a "you" -m "/usr/local/etc/php-fpm.conf fix" php myphp-fpm
docker stop php
docker rm -v php
docker run --detach --name php myphp-fpm

然后你又得到了基于固定图像运行的容器。


当然,您可以以在开始时运行原始图像的任何方式运行新图像。

我推荐第一种方式,因为它更容易在容器外编辑文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-03
    • 2015-03-07
    • 2016-06-27
    • 2016-03-10
    • 2018-08-19
    • 1970-01-01
    • 2015-07-28
    • 2021-12-26
    相关资源
    最近更新 更多