2017-02-14 39 views
1

我正在从头开始在图像上构建/部署go/golang微服务。非特权执行从零开始

是否可以在这种方式构建的映像上指定非特权执行 - 映像上只有两个文件 - 可执行文件和根证书文件 - 所以似乎没有任何概念容器内的特权。

我也用只读的容器和启用--selinux-=真--icc =假--iptables =真实的,但会感到更加温暖和模糊,如果我知道,可执行文件运行作为一个“共同”非特权用户。

回答

0

对于从构建“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”容器(这里作为一个卷)

+0

参见https://github.com/airdock-io/docker-base/wiki/How-Managing-user在码头集装箱 – VonC

+0

谢谢先生,非常感谢! –