繁体   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