【问题标题】:Container stop because of: "httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: No such file or directory", why?容器停止是因为:“httpd:无法打开配置文件 /etc/httpd/conf/httpd.conf:没有这样的文件或目录”,为什么?
【发布时间】:2017-06-20 01:18:27
【问题描述】:

我正在开发 PyroCMS 的 Docker 版本。这是repository 我拥有的最新文件。如您所见,我正在运行一个堆栈:CentOS 7(带有 Supervisord)、MySQL、Apache 和 PHP。这是docker-compose.yml 文件:

version: '2.1'
services:
    httpd:
        build: docker/httpd
        ports:
            - "8080:80"
        volumes_from:
            - php-fpm
    php-fpm:
        build:
            context: docker/php-fpm
            args:
                INSTALL_XDEBUG: "false"
                INSTALL_MONGO: "false"
                INSTALL_REDIS: "false"
                INSTALL_HTTP_REQUEST: "false"
                INSTALL_UPLOAD_PROGRESS: "false"
                INSTALL_XATTR: "false"
        depends_on:
            db:
                condition: service_healthy
    db:
        image: mysql
        healthcheck:
            test: "exit 0"
        environment:
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}

这是httpd 图像的Dockerfile

FROM reynierpm/centos7-supervisor
RUN yum install -y httpd nano && \
    yum clean all && rm -rf /tmp/yum*
RUN rm -f /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/* /etc/httpd/conf.modules.d/*
COPY container-files /
EXPOSE 80

我遇到了一个问题,因为httpd 容器以状态 1 退出并看到我得到以下日志:

httpd_1  | httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: No such file or directory

乍一看你会说:

你正在删除文件!!!在这一行RUN rm -f /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/* /etc/httpd/conf.modules.d/*

你是对的,但是如果你仔细观察你会发现我正在将它复制回来(因为我正在运行一个最小的 Apache 配置):

COPY container-files /

我不确定为什么找不到文件以及为什么容器停止并退出,任何人都可以看看这个并让我知道我在哪里犯了错误,如果有的话?

【问题讨论】:

  • 我会启动一个带有“httpd”服务容器的新容器实例的 bash shell,并手动调查目录。您可能会发现 COPY 命令没有将配置文件放置在您期望的位置。为此:docker-compose run --rm httpd bash。我假设 centos 映像已安装 bash。
  • 检查显示docker run -it httpd bash 和 ls 以检查您的文件是否存在

标签: docker docker-compose dockerfile


【解决方案1】:

你的 php-fpm Dockerfile 中有这个:

VOLUME ["/data/www", "/etc/httpd"]

这在 docker-compose.yml 中:

httpd:
    build: docker/httpd
    ports:
        - "8080:80"
    volumes_from:
        - php-fpm

因此,您的 httpd 映像最终会在 /etc/httpd 处挂载卷。该卷的内容会覆盖在构建时烘焙到 httpd 映像中的任何内容。

【讨论】:

  • 是的,我几分钟前就知道了,但不管怎样,你的点数到了!
猜你喜欢
  • 2012-07-03
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
相关资源
最近更新 更多