无法在Dockerfile中运行iptables



我已经为此斗争了一段时间!给定以下Dockerfile,如果我离开RUN iptables。。。行,然后在正在运行的docker容器中手动执行它们,它们工作得很好。但如果我把它们留在Dockerfile中,我会得到一个权限错误。

FROM ubuntu
RUN apt-get update
RUN apt-get install -y iptables
RUN iptables -I INPUT -p tcp --dport 27015 -j ACCEPT
RUN iptables -A INPUT -i eth0 -j QUEUE

docker构建的输出给出:

[+] Building 0.4s (7/8)
=> [internal] load build definition from Dockerfile                                                               0.0s
=> => transferring dockerfile: 199B                                                                               0.0s
=> [internal] load .dockerignore                                                                                  0.0s
=> => transferring context: 2B                                                                                    0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest                                                   0.0s
=> [1/5] FROM docker.io/library/ubuntu                                                                            0.0s
=> CACHED [2/5] RUN apt-get update                                                                                0.0s
=> CACHED [3/5] RUN apt-get install -y iptables                                                                   0.0s
=> ERROR [4/5] RUN iptables -I INPUT -p tcp --dport 27015 -j ACCEPT                                               0.3s
------
> [4/5] RUN iptables -I INPUT -p tcp --dport 27015 -j ACCEPT:
#7 0.256 getsockopt failed strangely: Operation not permitted
------
executor failed running [/bin/sh -c iptables -I INPUT -p tcp --dport 27015 -j ACCEPT]: exit code: 1

但如果我使用:

FROM ubuntu
RUN apt-get update
RUN apt-get install -y iptables

Docker构建完成OK,然后我用运行镜像

docker run -i -t --cap-add NET_RAW --cap-add NET_ADMIN 094d0bb9befb

容器打开,在命令提示符下,我可以如上所述键入iptables规则。他们被接受了,并且完全按照我的要求工作。

有什么想法可以直接从Dockerfile应用这些iptable规则吗?

如何直接从Dockerfile应用这些iptable规则?

你不能。它们没有什么意义——它们正在影响为构建图像而创建的临时容器。

每个容器都有一个单独的网络名称空间,其中包括单独的接口和防火墙。在容器启动时,会创建一个单独的网络空间。

创建一个将在CMDENTRYPOINT上运行或在容器启动时手动运行的脚本,并在该脚本中添加应影响当前容器环境的命令。。

相关内容

  • 没有找到相关文章

最新更新