2017-03-08 2 views
0

다른 컨테이너에서 컨테이너의 서비스를 시작하는 방법을 제안하십시오. 여기링크/포트 포워드가있는 다른 컨테이너에서 하나의 컨테이너에 액세스하십시오.

세부 사항 : CONT1 및 CONT2 :

도커 HOST1 2 개 컨테이너를 실행 중입니다.

CONT1은 우분투 및 아파치를 기반으로합니다. 그것은 IP 172.17.0.2를 가지고 있습니다. 여기서 포트 80은 Dockerfile에 노출되어 있습니다.

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

CONT2는 우분투 전용입니다. 이 컨테이너에는 아파치가 없습니다. IP 172.17.0.4를 가지고 있습니다.

CONT2 (소스)를 CONT1 (수신자)과 "링크"했습니다. CONT2에서 CONT1으로 ping 할 수 있고 그 반대도 가능합니다.

HOST1에서
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 

:: 나는

http://172.17.0.2:80를 사용하여 IE에서 아파치 웹 서비스를 시작할 수 있습니다하지만 내 의도는 아파치 있도록 CONT2에 내가 CONT2에서 요청을 전달하는 방법 즉, CONT2를 통해 CONT1의 아파치를 실행하는 것입니다 CONT1의 서비스는 CONT2 IP 및 포트 제공시 시작할 수 있습니다. HTTP : //172.17.0.4 : 권한 거부 문제에 대한

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 

답변

0

:

내가 IP NAT를 시도했지만 그것은 다음과 같은 오류가 발생합니다 1,234 추가 한 후 해결 문제를 옵션을 "--privileged"시작하는 동안 고정 표시기 다음과 같은 용기, 뭔가 :

고정 표시기 실행 - 그것은 --name debrcvr8 --link debsrc : 80 우분투 : 14.04/빈/bash는

그리고 대한 ALIdebsrc --user 루트 -p 5555를 --privileged 전달 문제 : 아래의 NAT 포트 포워딩 명령으로이 문제를 해결할 수있었습니다. CONT2에 DS :

루트 @의 ae06859a194e :/# iptables에 -t NAT -A PREROUTING -p TCP --dport -j DNAT --to-대상 : 루트 @의 ae06859a194e :/# iptables에 -t NAT -A POSTROUTING 여기

0

무도회 -j하는 CONT1에서 실행중인 아파치 웹 서버에 액세스 할 수 CONT2 (172.17.0.4)에서 실행 된 전체 명령입니다 (172.17.0.2:80)

고정 표시기 호스트 시스템에서

는 (이는 CONT1를 실행 그리고 CONT2), 나는 아파치에 접근하기 위해 다음 링크를 사용했다 : http://172.17.0.4:6666/

루트 @ ae06859a194e :/# iptables -t nat -A PREROUTING -p tcp -d 172. 17.0.4 --dport 6666 -j DNAT --to-대상 172.17.0.2:[email protected]:/#

루트 @의 ae06859a194e :/# iptables에 -t NAT -A POSTROUTING -j은 MASQUERADE

관련 문제