首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过链路/端口转发从一个容器访问另一个容器的应用程序

通过链路/端口转发从一个容器访问另一个容器的应用程序
EN

Stack Overflow用户
提问于 2017-03-08 16:54:21
回答 2查看 125关注 0票数 1

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

详细信息请查看此处:

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

CONT1基于ubuntu和apache。IP地址为172.17.0.2。这里的端口80暴露在Dockerfile中。

代码语言:javascript
复制
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。此container.It中没有apache的IP为172.17.0.4。

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

代码语言:javascript
复制
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和端口时启动。

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

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2017-03-09 14:18:53

对于权限被拒绝的问题:启动docker容器添加--privileged选项后解决的问题,如下图所示:

docker运行-it --名称debrcvr8 --链接debsrc:ALIdebsrc --用户根--特权-p 5555:80ubuntu: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 root -j伪装

票数 1
EN

Stack Overflow用户

发布于 2017-03-09 14:29:27

下面是在CONT2(172.17.0.4)上运行的完整命令,用于访问运行在CONT1(172.17.0.2:80)上的apache服务器

在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 root -j伪装

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42666838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档