使用链接/端口转发从另一个容器访问应用程序

请build议如何从另一个容器启动容器的服务。

详情在这里:

Docker HOST1运行2个容器:CONT1和CONT2。

CONT1基于ubuntu和apache。 它已经得到IP 172.17.0.2。 这里端口80暴露在Dockerfile中。

vi Dockerfile FROM ubuntu:14.04 MAINTAINER debu3645@yahoo.com RUN sudo apt-get update && sudo apt-get -y install iputils-ping traceroute apache2 EXPOSE 80 ENTRYPOINT ["apache2ctl"] CMD ["-D","FOREGROUND"] 

CONT2仅基于Ubuntu。 在这个容器中没有Apache,它已经得到IP 172.17.0.4。

我已经将CONT2(源)与CONT1(接收器)“连接”。 我可以从CONT2 ping CONT1,反之亦然。

 sudo docker run -d --name CONT1 debapcping (debapcping image contains ubuntu, apache) sudo docker run -d --name CONT2 --link CONT1:aliasCONT1 ubuntu:14.04 /bin/bash 

从HOST1 ::我可以使用http://172.17.0.2:80从IE启动Apache Web服务

但我的意图是通过CONT2启动CONT1的Apache,即如何将CONT2的请求转发到CONT2,以便CONT1的Apache服务可以启动提供CONT2的IP和端口,例如http://172.17.0.4:1234

我尝试了IP NAT,但是会抛出以下错误:

 iptables -t nat -A PREROUTING -p tcp -d 172.17.0.4 --dport 80 -j DNAT --to-destination 172.17.0.2:80 iptables v1.6.0: can't initialize iptables table `nat': Permission denied (you must be root) sudo docker info Containers: 8 Running: 3 Paused: 0 Stopped: 5 Images: 10 Server Version: 1.13.1 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 32 Dirperm1 Supported: false Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Swarm: active NodeID: i9b555lgjovk5ep3fln0j8roi Is Manager: false Node Address: 10.0.2.17 Manager Addresses: 10.0.2.15:2377 10.0.2.18:2377 Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1 runc version: 9df8b306d01f59d3a8029be411de015b7304dd8f init version: 949e6fa Security Options: apparmor Kernel Version: 3.13.0-110-generic Operating System: Ubuntu 14.04.1 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 1.49 GiB Name: Consul2 ID: 3I44:ZHAW:R6BO:NF2J:YCLQ:ZRW6:ULOE:AKJQ:HD7M:EMPE:7Z35:H4KY Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https: // index.docker.io /v1 / WARNING: No swap limit support Experimental: false Insecure Registries: 10.0.2.18:5000 127.0.0.0/8 Live Restore Enabled: false 

对于权限被拒绝的问题:在启动docker容器时添加“–privileged”选项后,问题就解决了,如下所示:

docker run -it –name debrcvr8 –link debsrc:ALIdebsrc –user root –privileged -p 5555:80 ubuntu:14.04 / bin / bash

而对于转发问题:我设法解决这个问题与CONT2下面的NAT端口转发命令:

root @ ae06859a194e:/#iptables -t nat -A PREROUTING -p tcp –dport -j DNAT –to-destination:root @ ae06859a194e:/#iptables -t nat -A POSTROUTING -j MASQUERADE

这是在CONT2(172.17.0.4)上运行的完整命令,用于访问运行在CONT1上的apache webserver(172.17.0.2:80)

在docker主机(运行CONT1和CONT2)中,我使用以下链接访问Apache: http : //172.17.0.4 : 6666/

root @ ae06859a194e:/#iptables -t nat -A PREROUTING -p tcp -d 172.17.0.4 –dport 6666 -j DNAT – 到目的地172.17.0.2:80root@ae06859a194e:/#

root @ ae06859a194e:/#iptables -t nat -A POSTROUTING -j MASQUERADE