ash shell 命令在构建映像时未运行,但在容器中运行正常

时间:2021-03-07 04:24:45

标签: docker docker-compose dockerfile

我有一个 docker-compose.yml 包含如下:

version: '3.9'

services:
        n2:
            build: .
            restart: always
volumes:
    db_data: {}

还有 Dockerfile 像这样:

from nginx:stable-alpine

add cm.ash /root
run chmod +x /root/cm.ash
run /root/cm.ash

这是 cm.ash 命令:

#!/bin/ash
nginx -s reload

问题是当我运行 docker-compose 进行构建时,出现此错误:

<块引用>

2021/03/07 04:18:35 [通知] 8#8:信号处理开始于 2021/03/07

<块引用>

04:18:35 [error] 8#8: open() "/var/run/nginx.pid" failed (2: No such

<块引用>

file or directory) nginx: [error] open() "/var/run/nginx.pid" failed

<块引用>

(2:没有那个文件或目录)命令'/bin/sh -c /root/cm.ash'

<块引用>

返回一个非零代码:1

如果我在 add cm.ash /root 中注释行 run chmod +x /root/cm.ashrun /root/cm.ashDockerfile,然后我 exec 容器与 ash 然后运行命令nginx -s reload,效果很好。

为什么会发生这种情况,这种行为的原因是什么?

我在 bashdash 之间看到了类似的行为,我通过将 bash 文件添加到图像中以代表 bash shell 运行命令来获取我的结果和它工作正常,但我不确定 dash 中这种行为的原因。

1 个答案:

答案 0 :(得分:1)

在构建期间,构建容器中没有运行 nginx 守护进程,因此您无法连接到守护进程并告诉他 reload

这也意味着您不需要重新加载,因为此时没有加载任何内容。

当您从最终映像启动容器时,守护进程(ngingx 映像的入口点)将启动,您将能够连接到正在运行的实例的 PID告诉它重新加载。

相关问题