簡體   English   中英

如何在Docker容器中移植?

[英]How to port forward in Docker container?

我想在Docker容器中使用iptables將8080端口轉發到80。 在構建中,我有一條錯誤消息,如下所示。

這是Dockerfile:

FROM fedora
RUN whoami && \
 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080

這是輸出:

[~]# docker build -t temp /home/edfromhadria/Documents/Docker/temp/.
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM fedora
 ---> 834629358fe2
Step 1 : RUN whoami &&  iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
 ---> Running in 95046cf959bf
root
iptables v1.4.21: can't initialize iptables table `nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
INFO[0001] The command [/bin/sh -c whoami &&  iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080] returned a non-zero code: 3 

提前感謝您提供的任何幫助。

首先,在docker build過程中運行iptables命令永遠不會有意義; 即使它工作, iptables命令也只修改內核的運行時配置。 這些更改不會在Docker鏡像上保留,並且在啟動容器時將無法使用。

其次,即使您在啟動容器后運行iptables容器(而不是在構建容器時),它仍然會失敗,因為默認情況下Docker容器沒有必要的權限來修改iptables配置(或者通常修改網絡,或掛載文件系統等)。 您可以使用--privileged標志啟動容器,但這可能不是您想要做的(因為它賦予了容器可能不需要的許多額外權限,從安全角度來看,這是一個好主意只授予絕對必要的權限)。

您通常會使用Docker的-p選項來處理此問題,以將主機上的端口連接到容器中的端口,例如:

docker run -p 80:8080 temp

這會將主機上的端口80鏈接到容器上的端口8080。

如果這不是您想要的,更簡單的解決方案就是將容器中的應用程序配置為在所需端口上運行。

暫無
暫無

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

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