我正在Docker中运行这样的构建:
getProducts
我正在使用getProducts(): Observable<any> {
return this.http.get(`http://localhost/api/product-search.php`, this.setHttpHeader()).pipe(
tap(_ => this.log(`found fitters matching `)),
catchError(this.handleError<Product[]>('getPosition', []))
);;
}
设置本地用户,以避免root拥有的文件出现在我的主目录中。
现在,问题是我需要在构建脚本中使用docker run --user $(id -u):$(id -g) --rm --network=host -v `pwd`:${SRC_MOUNT_DIR} my-image:latest my-build-script.sh
来安装其他构建中的某些依赖项,但这需要root。
我该如何安排?我想不可能--user
在没有密码的情况下为所有可能的用户使用。.
答案 0 :(得分:1)
如果容器内的用户可以运行sudo apt install ...
,那么您也可以以root用户身份运行容器中的所有内容,因为任何攻击都可以sudo ...
攻击代码中的任何一个。相反:
请考虑是否需要在容器内apt install
,或者是否可以在图像中这样做。最好在映像中安装二进制文件并进行部署,而不是每次运行容器时都重新安装应用程序。
如果您的用例在启动时需要root用户,请以root用户身份启动容器,然后在完成这些root用户步骤后将其移交给用户。像gosu
这样的工具就是为此而精心设计的。对于执行此操作的入口点的示例,我有一个带有entrypoint script的docker-base映像,该映像添加了gosu
并使用exec
运行CMD来避免/bin/sh
pid 1(有助于信号处理)。