从另一个容器调用 docker 容器

Posted

技术标签:

【中文标题】从另一个容器调用 docker 容器【英文标题】:call a docker container from another container 【发布时间】:2016-06-20 06:10:59 【问题描述】:

我已经部署了两个 docker 容器,它们托管了部署在 Jetty 中的两个 REST 服务。

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

端点:-

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]

我已将容器配置为:

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

这会引发连接被拒绝异常。这是我的配置。

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:~# 

问题:-

我正在尝试从容器 2 访问部署在容器 1 中的端点。但是,我收到连接被拒绝的异常。 我尝试在容器 2 中暴露端口 7070。但没有成功。

【问题讨论】:

service2 正在使用 URL http://localhost:7070/service1/hello 从容器内调用 service1?这行不通,localhost 仅托管service2。您将service2 容器链接到service1,因此请尝试改用http://service1:7070/service1/hello。您可以阅读有关container links 的更多信息以了解原因。 你的问题不是问题(-: 【参考方案1】:
curl http://service1:7070/ 

使用 - host1_name:inner_port_of_host1

该主机在 container2 中称为“service1”。使用它作为主机名,端口是 service1 容器中的内部端口侦听器。

如果你在 service1 上有一个 express 服务器,监听 7070 端口。

【讨论】:

以上是关于从另一个容器调用 docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

从另一个容器访问 docker 容器

从另一个容器(Docker)连接到 postgresql 容器

无法从另一个容器连接到 mongodb docker 容器

如何从另一个容器访问在 Docker 容器中运行的 Mopidy

音频文件未从另一个 docker 容器播放

mac的docker:从另一个容器访问mongo