我正在从头开始在图像上构建/部署go/golang微服务。非特权执行从零开始
是否可以在这种方式构建的映像上指定非特权执行 - 映像上只有两个文件 - 可执行文件和根证书文件 - 所以似乎没有任何概念容器内的特权。
我也用只读的容器和启用--selinux-=真--icc =假--iptables =真实的,但会感到更加温暖和模糊,如果我知道,可执行文件运行作为一个“共同”非特权用户。
我正在从头开始在图像上构建/部署go/golang微服务。非特权执行从零开始
是否可以在这种方式构建的映像上指定非特权执行 - 映像上只有两个文件 - 可执行文件和根证书文件 - 所以似乎没有任何概念容器内的特权。
我也用只读的容器和启用--selinux-=真--icc =假--iptables =真实的,但会感到更加温暖和模糊,如果我知道,可执行文件运行作为一个“共同”非特权用户。
对于从构建“FROM scratch
”的映像启动的容器内运行CMD的用户(root),似乎没有任何选择。
但是根据容器的定义,该用户只能影响其自己的(磁盘,内存,资源)空间,而不是主机。所以这应该不重要。
唯一的另一种选择是从头开始定义一个容器,仅用于声明一个容器容器,该容器将用于能够以非root用户运行的完整映像。
请参阅 “Running as a non-root inside a container”
$ echo 'FROM scratch
ADD data.tar/
VOLUME ["/data"]' > Dockerfile
$ docker build -t minimal .
$ docker create --name minimal minimal :
,其安装这个最小体积的容器需要与ID 1000创建用户的容器:
$ docker run --rm --volumes-from minimal -it debian:jessie /bin/bash -c 'useradd postgres && ls -l /data'
那是不是你所需要的(因为Go程序不需要任何动态库,只能在系统调用中运行)。但是,这说明了非root用户如何使用“FROM scratch
”容器(这里作为一个卷)
参见https://github.com/airdock-io/docker-base/wiki/How-Managing-user在码头集装箱 – VonC
谢谢先生,非常感谢! –