Karthick R
Karthick R

Reputation: 619

call a docker container from another container

I have deployed two docker containers which hosts two REST services deployed in Jetty.

Container 1 hosts service 1 and it Listens to 7070
Container 2 hosts service 2 and it  Listens to 9090

Endpoints:-

service1:
/ping
/service1/{param}

service2:
/ping
/service2/callService1

curl -X GET http://localhost:7070/ping [Works]
curl -X GET http://localhost:7070/service1/hello [Works]
curl -X GET http://localhost:9090/ping [Works]

I have configured the containers in such a way that:

http://localhost:9090/serivce2/callService1 
calls 
http://localhost:7070/service1/hello

This throws a connection refused exception. Here's the configuration I have.

docker-compose.yml
------------------
service1: 
  build: microservice/
  ports: 
    - "7070:7070"
  expose:
    - "7070"
service2:
 build: microservice_link/
 ports:
 - "9090:9090"
 expose: 
 - "9090"
 links:
 - service1

service1 Dockerfile
-------------------
FROM localhost:5000/java:7
COPY ./target/service1.jar /opt
WORKDIR /opt
ENTRYPOINT ["java", "-jar", "service1.jar","7070"]
CMD [""]

service2 Dockerfile
-------------------
FROM localhost:5000/java:7
COPY ./target/service2.jar /opt
WORKDIR /opt
ENTRYPOINT ["java", "-jar", "service2.jar","9090"]
CMD [""]

docker info
-----------
root@LT-NB-108U:~# docker info
Containers: 3
 Running: 2
 Paused: 0
 Stopped: 1
Images: 12
Server Version: 1.10.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 28
 Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Plugins: 
 Volume: local
 Network: null host bridge
Kernel Version: 3.13.0-48-generic
Operating System: Ubuntu precise (12.04.5 LTS)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.47 GiB
Name: LT-NB-108U
ID: BS52:XURM:3SD7:TC3R:7YVA:ZBZK:CCL2:7AVC:RNZV:RBGW:2X2T:7C46
WARNING: No swap limit support
root@LT-NB-108U:~# 

Question:-

I am trying to access the endpoint deployed in Container 1 from Container 2. However, I get a connection refused exception. I tried exposing port 7070 in container 2. That didn't work.

Upvotes: 3

Views: 5367

Answers (1)

Lee Hodges
Lee Hodges

Reputation: 21

curl http://service1:7070/ 

use - host1_name:inner_port_of_host1

That host is called "service1" in container2. Use that as the host name and the port is the inner port listener in service1's container.

If you have an express server on service1, listen on port 7070.

Upvotes: 1

Related Questions