我试图创建我自己的Nginx
图像,使用apline:latest
图像,修复了很多错误后,感谢互联网,我设法做到这一点,一切正常,但问题是当我运行以下命令:
rc-service nginx status
* status: stopped
当我尝试启动服务时,它会给我如下所示:
rc-service nginx start
* WARNING: nginx is already starting
即使服务停止了,第二个命令的输出告诉它已经启动了?!
所以我打开我的docker-machine的localhost来验证服务是开着还是关着,nginx的html页面成功出现。
我试着运行rc-service nginx reload
,结果如下:
rc-service nginx reload
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/blkio/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/cpu/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/cpuacct/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/cpuset/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/devices/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/freezer/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/hugetlb/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/memory/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/net_cls/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/net_prio/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/perf_event/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/pids/tasks: Read-only file system
* nginx: cannot `reload' as it has not been started
下面是nginx -t
的输出:
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
这里是less /var/log/nginx/error.log
的输出,如下所示,没有错误:
less: can't open '/var/log/nginx/error.log': No such file or directory
这是我的dockerfile:
From alpine:latest
COPY nginx.conf ./tmp
COPY index.html ./tmp
COPY run.bash ./tmp
COPY run2.bash ./tmp
RUN apk update && \
apk add nginx && \
adduser -D -g 'www' www && \
mkdir /www && \
chown -R www:www /var/lib/nginx && \
chown -R www:www /www && \
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig && \
apk add openrc --no-cache && \
sh tmp/run.bash
cmd sh tmp/run2.bash
run.bash:
mv tmp/nginx.conf /etc/nginx/nginx.conf
mv tmp/index.html /www/index.html
run2.bash:
mkdir /run/openrc
touch /run/openrc/softlevel
mkdir -p /run/nginx
nginx
sh
这是我遵循的指南:
https://wiki.alpinelinux.org/wiki/Nginx
我想知道为什么rc-service nginx reload
不工作,即使我的nginx服务在我的docker机器上运行完美,以及为什么rc-service nginx status
告诉nginx服务停止,即使它不是?
先谢谢你
顺便说一下,当我运行这个命令nginx -s reload
时,它没有任何错误。
2条答案
按热度按时间ttisahbt1#
经过调试和大量的试验和错误,我找到了一个完美的解决方案,至少对我来说,大卫迷宫的答案是非常有帮助的,但我需要能够重新启动容器内的nginx服务。
当我使用以下命令启动容器时:
我们访问容器 shell ,我们需要下载
nginx
服务器,和openrc
能够使用rc-service
命令行。#ANSWER 1
现在我们将使用以下命令测试nginx服务器是否存在错误:
正如你可以从我们得到的输出中看到的,它告诉你应该创建一个丢失的文件或目录,所以让我们创建那个目录:
我们给予我们创建的目录一些权限:
现在我们使用nginx:
让我们测试一下nginx服务是否使用
rc-service
命令启动:所以从上面的输出中我们看到我们有两个问题,
openrc
没有 Boot ,并且有一个丢失的文件softlevel
:让我们从使用
openrc
启动系统开始,只需输入它本身:现在我们创建丢失的文件:
现在我们的
rc-service
命令工作得很好:让我们启动我们的服务器:
检查是否启动:
#ANSWER 2
或者你可以直接调用这两个命令行:
现在你可以启动nginx服务器了:)
希望我说清楚了。
cfh9epnr2#
Docker容器通常只运行一个进程。您不需要“启动服务”或“重新启动服务”;一般来说,服务器进程本身就是主容器进程,如果需要重新启动服务,则需要重新启动整个容器。通常,“服务”类型的命令在Docker上下文中缺少一些关键的基础设施,并且无法工作。
在你的Dockerfile中,你可以让主命令作为前台进程启动Nginx
然后,当您需要更改配置时,构建新映像并重新创建容器