经过调试和大量试验和错误,我至少找到了一个完美的解决方案,David Maze 的回答非常有帮助,但出于测试 的目的,我需要我的shell 是可访问的,因为当你运行nginx -g "daemon off;" 时,除非你停止命令进程,否则你无法访问你的容器 shell。
无论何时我使用以下命令启动我的容器:
docker run -it -p 80:80 -p 443:443 alpine:latest
我们访问容器shell,我们需要下载nginx server 和openrc 才能使用rc-service 命令行。
/ # apk update
/ # apk add nginx openrc
#ANSWER 1
现在我们将使用以下命令测试 nginx 服务器中是否存在错误:
/ # nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] open() "/run/nginx/nginx.pid" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed
你可以从我们得到的输出中看到,它告诉你应该创建一个丢失的文件或目录,所以让我们创建那个目录:
/ # ls -la run/
total 8
drwxr-xr-x 2 root root 4096 Dec 16 10:31 .
drwxr-xr-x 1 root root 4096 Jan 16 08:12 ..
/ # mkdir /run/nginx/
我们给那个目录我们创建了一些权限:
/ # chown -R nginx:nginx /run/nginx/
/ # chmod 775 /run/nginx/
/ # ls -la /run/
total 12
drwxr-xr-x 1 root root 4096 Jan 16 08:15 .
drwxr-xr-x 1 root root 4096 Jan 16 08:12 ..
drwxrwxr-x 2 nginx nginx 4096 Jan 16 08:15 nginx
现在我们可以很好地使用 nginx 了:
/ # nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
用rc-service命令测试一下我们的nginx服务是否启动:
/ # rc-service nginx status
* You are attempting to run an openrc service on a
* system which openrc did not boot.
* You may be inside a chroot or you may have used
* another initialization system to boot this system.
* In this situation, you will get unpredictable results!
* If you really want to do this, issue the following command:
* touch /run/openrc/softlevel
所以从上面的输出我们看到我们有两个问题,openrc没有启动,还有一个文件丢失softlevel:
/ # ls -la /run/
total 12
drwxr-xr-x 1 root root 4096 Jan 16 08:15 .
drwxr-xr-x 1 root root 4096 Jan 16 08:12 ..
drwxrwxr-x 2 nginx nginx 4096 Jan 16 08:22 nginx
让我们首先通过输入openrc 来启动我们的系统:
/ # openrc
* Caching service dependencies ...
Service `hwdrivers' needs non existent service `dev'
/ # ls -la /run/
total 16
drwxr-xr-x 1 root root 4096 Jan 16 08:29 .
drwxr-xr-x 1 root root 4096 Jan 16 08:12 ..
drwxrwxr-x 2 nginx nginx 4096 Jan 16 08:22 nginx
drwxr-xr-x 14 root root 4096 Jan 16 08:29 openrc
/ # ls -la /run/openrc/
total 64
drwxr-xr-x 14 root root 4096 Jan 16 08:29 .
drwxr-xr-x 1 root root 4096 Jan 16 08:29 ..
drwxr-xr-x 2 root root 4096 Jan 16 08:29 daemons
-rw-r--r-- 1 root root 11 Jan 16 08:29 depconfig
-rw-r--r-- 1 root root 2895 Jan 16 08:29 deptree
drwxr-xr-x 2 root root 4096 Jan 16 08:29 exclusive
drwxr-xr-x 2 root root 4096 Jan 16 08:29 failed
drwxr-xr-x 2 root root 4096 Jan 16 08:29 hotplugged
drwxr-xr-x 2 root root 4096 Jan 16 08:29 inactive
drwxr-xr-x 2 root root 4096 Jan 16 08:29 options
drwxr-xr-x 2 root root 4096 Jan 16 08:29 scheduled
drwxr-xr-x 2 root root 4096 Jan 16 08:29 started
drwxr-xr-x 2 root root 4096 Jan 16 08:29 starting
drwxr-xr-x 2 root root 4096 Jan 16 08:29 stopping
drwxr-xr-x 2 root root 4096 Jan 16 08:29 tmp
drwxr-xr-x 2 root root 4096 Jan 16 08:29 wasinactive
现在我们创建丢失的文件:
/ # touch /run/openrc/softlevel
现在我们的rc-service 命令完美运行:
/ # rc-service nginx status
* status: stopped
让我们启动我们的服务器:
/ # rc-service nginx start
/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
* Starting nginx ... [ ok ]
检查是否启动:
/ # rc-service nginx status
* status: started
#ANSWER 2
或者你可以简单地调用这两个命令行:
/ # openrc
* Caching service dependencies ...
Service `hwdrivers' needs non existent service `dev' [ ok ]
/ # touch /run/openrc/softlevel
现在你可以启动你的 nginx 服务器了 :)
/ # rc-service nginx status
* status: stopped
/ # rc-service nginx start
/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
* /run/nginx: creating directory
* /run/nginx: correcting owner
* Starting nginx ... [ ok ]
/ # rc-service nginx status
* status: started
希望我是清楚的。