我有一个 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.ash
、run /root/cm.ash
和 Dockerfile
,然后我 exec
容器与 ash
然后运行命令nginx -s reload
,效果很好。
为什么会发生这种情况,这种行为的原因是什么?
我在 bash
和 dash
之间看到了类似的行为,我通过将 bash
文件添加到图像中以代表 bash shell 运行命令来获取我的结果和它工作正常,但我不确定 dash
中这种行为的原因。
答案 0 :(得分:1)
在构建期间,构建容器中没有运行 nginx
守护进程,因此您无法连接到守护进程并告诉他 reload
。
这也意味着您不需要重新加载,因为此时没有加载任何内容。
当您从最终映像启动容器时,守护进程(ngingx
映像的入口点)将启动,您将能够连接到正在运行的实例的 PID
告诉它重新加载。