Docker:虽然为守护程序

时间:2016-08-26 12:29:04

标签: docker namespaces daemon

虽然我已经启用了用户命名空间重映射,但是docker容器中的进程仍然在“host”的UID下运行。

操作系统是:4.4.0-21上的Ubuntu 16.04

> sudo docker --version
Docker version 1.12.0, build 8eab29e

dockerd配置

> grep "DOCKER_OPTS" /etc/default/docker
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 --ipv6  --userns-remap=default"
当我手动运行时,已经创建了

从属UID和GID映射,即使用上面的docker opts字符串

> grep "dock" /etc/sub*
/etc/subgid:dockremap:362144:65536
/etc/subuid:dockremap:362144:65536

但是,当我(重新)启动dockerd作为服务时,子UID / GID没有创建 - 但必须手动运行它。

在重新启动dockerd之后,容器中的所有进程都不在重映射范围内,而是主机的1到1,即容器根进程仍然具有UID = 0.

,例如,运行在顶部的测试容器

> sudo docker run -t -i ubuntu /usr/bin/top
  ...
在主机

上的容器外检查时,

在UID = 0时运行最高

> ps -xaf --forest -o pid,ruid,ruser,cmd | grep top
PID  RUID RUSER    CMD
23015     0 root      |           \_ sudo docker run -t -i ubuntu /usr/bin/top
23016     0 root      |               \_ docker run -t -i ubuntu /usr/bin/top

显然,当将docker作为守护进程运行时,重新映射到从属UID对我来说不起作用吗?

1 个答案:

答案 0 :(得分:0)

通过systemd运行dockerd时,不使用

/ etc / default / docker。

因此我在docker-config上做的任何更改(在我之前应用的dist-upgrade之后)都没有应用。

有关使用Systemd配置docker守护程序的信息,请参阅文档 https://docs.docker.com/engine/admin/systemd/

使用配置下拉文件 /etc/systemd/system/docker.service.d