我决定踏上容器化之旅,进一步了解容器的工作原理,以获得更多信心并成为更熟练的程序员。我正在尝试运行一个简单的 nginx 容器,runc
但我遇到了困难。我查看了官方文档,但没有太多细节,我也在谷歌上搜索过,但没有找到任何细节,所以我觉得我需要更多指导。
我已经创建了一个 OCI 包并从nginx
图像中获取了根文件系统。
mkdir containers/nginx/rootfs
cd containers/nginx
docker export $(docker create nginx:alpine) | tar -C rootfs -xvf -
runc spec
运行sudo runc run mynginx
会给我默认sh
进程,但是当我nginx
在容器内运行时会出现错误
/ # nginx
2023/03/12 22:33:52 [emerg] 6#6: chown("/var/cache/nginx/client_temp", 101) failed (1: Operation not permitted)
nginx: [emerg] chown("/var/cache/nginx/client_temp", 101) failed (1: Operation not permitted)
为什么?我不是 root 吗?
/ # id
uid=0(root) gid=0(root)
是的。但是,列表显示只有/dev/
、/proc
和/sys
归 root 所有,其他文件夹归用户 所有1001
。
/ # ls -l
total 64
drwxr-xr-x 2 1001 1001 4096 Feb 10 16:45 bin
drwxr-xr-x 5 root root 360 Mar 12 22:33 dev
drwxr-xr-x 2 1001 1001 4096 Feb 11 10:04 docker-entrypoint.d
-rwxrwxr-x 1 1001 1001 1616 Feb 11 10:03 docker-entrypoint.sh
drwxr-xr-x 21 1001 1001 4096 Mar 12 20:35 etc
-rw-r--r-- 1 1001 1001 0 Mar 12 21:59 hello
drwxr-xr-x 2 1001 1001 4096 Feb 10 16:45 home
drwxr-xr-x 7 1001 1001 4096 Feb 11 10:04 lib
drwxr-xr-x 5 1001 1001 4096 Feb 10 16:45 media
drwxr-xr-x 2 1001 1001 4096 Feb 10 16:45 mnt
drwxr-xr-x 2 1001 1001 4096 Feb 10 16:45 opt
dr-xr-xr-x 306 root root 0 Mar 12 22:33 proc
drwx------ 2 1001 1001 4096 Mar 12 21:26 root
drwxr-xr-x 2 1001 1001 4096 Feb 10 16:45 run
drwxr-xr-x 2 1001 1001 4096 Feb 10 16:45 sbin
drwxr-xr-x 2 1001 1001 4096 Feb 10 16:45 srv
dr-xr-xr-x 13 root root 0 Mar 12 22:33 sys
drwxrwxr-x 2 1001 1001 4096 Feb 11 10:04 tmp
drwxr-xr-x 7 1001 1001 4096 Feb 10 16:45 usr
drwxr-xr-x 12 1001 1001 4096 Feb 10 16:45 var
发生了什么事?你能帮助我吗?