簡體   English   中英

無法在 Dockerfile 中運行 iptables

[英]Cant run iptables in Dockerfile

我已經為此奮斗了一段時間,鑒於以下 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 構建的 output 給出:

[+] 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 規則?

你不能。 而且它們毫無意義 - 它們正在影響為構建圖像而創建的臨時容器。

每個容器都有一個單獨的 .network 命名空間,其中包括單獨的接口和防火牆。 在容器啟動時,會創建一個單獨的網絡空間。

創建將在CMDENTRYPOINT上運行或在容器啟動時手動運行的腳本,並在該腳本中添加應影響當前容器環境的命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM