【发布时间】:2020-09-18 16:50:37
【问题描述】:
如何在具有附加功能的 docker 容器中运行脚本,例如 NET_ADMIN?
我正在测试一些我想在需要NET_ADMIN 权限的 docker 映像中运行的命令。例如,这有效:
docker run --rm -it --cap-add 'NET_ADMIN' debian:stable-slim "iptables -L"
但是如果我想执行一个脚本(通过docker exec),那么突然--cap-add 选项不可用。
root@disp8686:~# cat << EOF > docker_script.sh
> apt-get update
> apt-get -y install iptables
> iptables -L
> EOF
root@disp8686:~# docker exec -it --cap-add 'NET_ADMIN' debian:stable-slim docker_script.sh
unknown flag: --cap-add
See 'docker exec --help'.
root@disp8686:~#
为什么docker run 存在--cap-add 而docker exec 不存在,我如何使用--cap-add 在docker 容器中运行脚本?
【问题讨论】:
-
docker exec是调试工具,不能更改容器的能力集。作为设计目标,容器一般不能修改主机的网络配置;无论您尝试运行什么,最好不要使用 Docker。是否有实际需要此设置的相关应用程序代码可以添加到问题中? -
目的不是修改主机的网络配置。目的是修改容器的网络配置。这是我的应用程序的构建脚本,我需要
NET_ADMIN来配置iptables,所以我可以确定一些可能会下载未经验证的代码(即pip)的构建命令在安全的情况下无法访问互联网包管理器(例如apt-get)可以。我正在使用 docker,因此它是可移植的,用户可以轻松验证我的构建是否可重现。
标签: docker docker-run docker-exec