这是我使用 dockerd 及其插件开发 Docker 容器的第一个成功周,最近我在自动化守护进程后发现了一些问题。
试图操纵docker 复制代码作为 systemd 单元,以 root 身份加载系统范围的在 /usr/lib/systemd/系统/*但我遇到了下面所述的问题;
- 我想在特定用户“docker”下运行 docker-daemon.service 和 containerd,但我不确定如何设置范围/切片功能。
- 不知道 Unit 套接字文件的功能,或者它是否是实际的 unix 套接字或文件描述符,或者其实际的文件可见性隔离目的。
- 一旦守护进程启动,X11 将不会再次加载,APT 也不会加载,因为服务守护进程会以某种方式改变 /tmp 权限。我已将 /tmp 设置为 rw、exec、suid,但没有成功。
- 我确实没有完全关注 Systemd 安全性,因此这些选项(LockPersonality、NoNewPrivileges、RestrictNamespaces 等)被注释掉了。
我唯一感兴趣的是了解 SYSCAPS 或之前提到的服务单元安全操作员是否能够使守护进程和 /tmp 权限可用。
这是我的实际工作文件。docker
-daemon.service
[Unit]
Description=Docker Daemon Service
Requires=docker-daemon.socket
ConditionUser=root
[Service]
Type=notify
Environment="DOCKER_TMPDIR=/tmp"
Environment="DOCKER_OPTS='--data-root /tmp/doc --dns 127.0.0.1 --log-level info --experimental -H unix://'"
#ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 --containerd=/run/containerd/containerd.sock
Environment="PATH=/opt/boot/docker/:/sbin/:$PATH"
ExecStart=/opt/boot/docker/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
#LockPersonality=yes
#MemoryDenyWriteExecute=yes
#NoNewPrivileges=no
Restart=on-failure
#RestrictNamespaces=no
#SystemCallArchitectures=native
#SystemCallFilter=@system-service
TimeoutSec=20
RestartSec=5
UMask=0077
Slice=session.slice
[Install]
Also=docker-daemon.socket
WantedBy=default.target
docker-daemon.socket
[Unit]
Description=Dockerd Daemon socket
ConditionUser=root
[Socket]
Priority=6
Backlog=5
ListenStream=%t/docker/docker
[Install]
WantedBy=sockets.target