[英]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 命名空間,其中包括單獨的接口和防火牆。 在容器啟動時,會創建一個單獨的網絡空間。
創建將在CMD
或ENTRYPOINT
上運行或在容器啟動時手動運行的腳本,並在該腳本中添加應影響當前容器環境的命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.