在 Dockerfile 中不能 运行 iptables
Cant run iptables in Dockerfile
为此我纠结了好久!鉴于以下 Docker 文件,如果我离开 运行 iptables... 行,然后在 运行ning docker 容器内手动执行它们,它们工作正常。但是,如果我将它们留在 Docker 文件中,则会出现权限错误。
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 规则。他们被接受并完全按照我的要求工作。
知道如何直接从 Docker 文件应用这些 iptable 规则吗?
how I can apply these iptable rules directly from the Dockerfile?
你不能。它们毫无意义 - 它们正在影响为构建图像而创建的临时容器。
每个容器都有一个单独的网络名称space,其中包括单独的接口和防火墙。在容器启动时,会创建一个单独的网络 space。
创建将在 CMD
或 ENTRYPOINT
上 运行 或在容器启动时手动执行的脚本,并在该脚本中添加应影响当前容器环境的命令..
为此我纠结了好久!鉴于以下 Docker 文件,如果我离开 运行 iptables... 行,然后在 运行ning docker 容器内手动执行它们,它们工作正常。但是,如果我将它们留在 Docker 文件中,则会出现权限错误。
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 规则。他们被接受并完全按照我的要求工作。
知道如何直接从 Docker 文件应用这些 iptable 规则吗?
how I can apply these iptable rules directly from the Dockerfile?
你不能。它们毫无意义 - 它们正在影响为构建图像而创建的临时容器。
每个容器都有一个单独的网络名称space,其中包括单独的接口和防火墙。在容器启动时,会创建一个单独的网络 space。
创建将在 CMD
或 ENTRYPOINT
上 运行 或在容器启动时手动执行的脚本,并在该脚本中添加应影响当前容器环境的命令..