【问题标题】:Docker httpd:alpine image exits with code 1Docker httpd:alpine 图像以代码 1 退出
【发布时间】:2020-05-17 14:19:12
【问题描述】:

我正在尝试使用httpd docker image 运行一些基本的 html 页面。

Dockerfile

FROM httpd:alpine

COPY ./views /usr/local/apache2/htdocs/    # where my html pages stored

COPY httpd.conf /usr/local/apache2/conf/httpd.conf

RUN httpd -v

EXPOSE 7074

httpd.conf

ServerName localhost
Listen 7074
LoadModule mpm_event_module modules/mod_mpm_event.so

码头工人撰写

version: '3'

frontend_image:
    image: frontend_image
    build: 
      context: ./frontend_image
      dockerfile: Dockerfile
    network_mode: "host"
    env_file: "./api.env"
    depends_on: 
      - apigateway

然后:sudo docker-compose up --build

RUN httpd -v 给出:

Server version: Apache/2.4.43 (Unix)
Server built:   Apr 24 2020 15:46:58

但是

Project_frontend_image_1 以代码 1 退出

我如何向httpd 添加入口点,因为我在/usr/sbin 中没有apachectl2

参考:Docker run Exited 1 httpd

编辑:

我试过docker run -dit --name my-apache-app -p 7575:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 并且有效。

【问题讨论】:

  • 还有更多的日志信息吗?为什么需要它与network_mode: host 一起运行? (这将阻止它连接到apigateway 容器,例如,这可能与您的问题有关。)
  • @DavidMaze 没有日志,我试过了。我已经删除了network_mode: host,但还是有问题。我使用它是因为它很容易将来自 localhost 的所有服务与端口连接起来。
  • 尝试在交互模式(-it)下运行 docker 镜像,如果有错误会提供任何错误
  • @janitha000 我已将stdin_open: truetty: true 添加到我的docker-compose 文件中,但结果相同。 stackoverflow.com/questions/36249744/…

标签: apache docker docker-compose


【解决方案1】:

这似乎是 httpd.conf 文件而不是 Docker 映像的问题。

因为您可以运行docker run -dit --name my-apache-app -p 7575:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 并访问 apache 服务。

运行上述命令并登录到正在运行的容器:sudo docker exec -it container_id /bin/sh

cat /usr/local/apache2/conf/httpd.conf

复制内容并过去你的httpd.conf,更改端口。

无需像httpd:alpine 基础镜像那样添加CMD[""] 的东西。

只需 COPY httpd.conf /usr/local/apache2/conf/httpd.conf 在 Dockerfile 中。

【讨论】:

    【解决方案2】:

    这是httpd alpine image默认执行的脚本:

    2.4/alpine/httpd-foreground

    #!/bin/sh
    set -e
    
    # Apache gets grumpy about PID files pre-existing
    rm -f /usr/local/apache2/logs/httpd.pid
    
    exec httpd -DFOREGROUND "$@"
    

    尝试在rm 命令前后添加echo "test" 以检查:

    • CMD 脚本实际上被调用了
    • rm 命令不是导致错误的命令(并且脚本以状态 1 退出)

    docker-library/httpd issue 127 提到了一个类似的问题,用Apache ErrorLog directive 解决了(大概类似于issue 133, with a mounted httpd-vhosts.conf 中使用的问题。


    我试过docker run -dit --name my-apache-app -p 7575:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 并且有效。

    然后修改您的 docker-compose.yml 以包含相同的挂载 (see documentation):

    frontend_image:
        image: frontend_image
        volumes:
          - ./:/usr/local/apache2/htdocs/
        build: 
          context: ./frontend_image
          dockerfile: Dockerfile
        network_mode: "host"
        env_file: "./api.env"
        depends_on: 
          - apigateway
    

    【讨论】:

    • @SachithMuhandiram 如github.com/docker-library/httpd/blob/… 中所见,您自己的 Dockerfile 应包含COPY httpd-foreground /usr/local/bin/,并按照答案中的指示修改httpd-foreground,以进行测试。
    • @SachithMuhandiram 另外,请看我编辑以在您的 docker-compose.yml 中包含缺少的卷
    • @SachithMuhandiram 我指的是您自己的编辑:stackoverflow.com/revisions/61853292/2。您添加了一个卷:-v "$PWD":/usr/local/apache2/htdocs/。我建议在您的docker-compose.yml 中添加相同的卷以查看docker-compose up 是否有效(就像您的docker run 命令有效)
    • @SachithMuhandiram 好的。您是否在您的Dockerfile 中修改了httpd-foregroundCOPY,以便在运行时获得一些跟踪信息?
    • @SachithMuhandiram 由于docker runhttpd:2.4 图像一起使用,您能否尝试相同的docker run,但使用frontend_image 图像?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多