问题描述
如何在具有附加功能(例如NET_ADMIN
)的docker容器中运行脚本?
我正在测试一些我想在具有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:~#
为什么--cap-add
存在docker run
却不存在docker exec
,为什么我要使用--cap-add
在docker容器中运行脚本?
解决方法
docker exec
不支持--cap-add
选项,但是您可以使用--volume
的{{1}}选项使Docker主机上的脚本可用于容器并执行如下所示:
docker run
这是Debian 10中的示例执行:
tmpDir=`mktemp -d`
pushd "${tmpDir}"
cat << EOF > docker_script.sh
apt-get update
apt-get -y install iptables
iptables -L
EOF
chmod +x docker_script.sh
sudo docker run --rm -it --cap-add 'NET_ADMIN' --volume "${tmpDir}:/root" debian:stable-slim /bin/bash -c "cd /root && ./docker_script.sh"