我已經為此奮斗了一段時間!給定以下 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 build 的輸出給出:
[ ] 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 構建完成正常,然后我運行映像:
docker run -i -t --cap-add NET_RAW --cap-add NET_ADMIN 094d0bb9befb
容器打開,在命令提示符下我可以輸入上面的 iptables 規則。他們被接受并完全按照我的要求作業。
有什么想法可以直接從 Dockerfile 應用這些 iptable 規則嗎?
uj5u.com熱心網友回復:
如何直接從 Dockerfile 應用這些 iptable 規則?
你不能。而且它們毫無意義——它們正在影響為構建影像而創建的臨時容器。
每個容器都有一個單獨的網路命名空間,其中包括單獨的介面和防火墻。在容器啟動時,會創建一個單獨的網路空間。
創建一個將在容器啟動時運行或手動運行的腳本,CMD并ENTRYPOINT在該腳本中添加應該影響當前容器環境的命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/428223.html
