如何访问另一个撰写文件中声明的服务?

时间:2018-10-04 08:12:45

标签: docker docker-compose

我有2个docker compose文件:

第一:

version: '3'
services:
  service1:
  ports:
  - "8081:8080"
  ...

秒:

version: '3'
services:
  service2:
  ports:
  - "8088:8088"

service2起,我尝试执行对server1的http请求:

org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://service1:8081/api/v1/test/": service1; nested exception is java.net.UnknownHostException:service1] with root cause
router    |
router    | java.net.UnknownHostException: resource.mng
router    |     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_171]
router    |     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_171]

我该如何解决?

2 个答案:

答案 0 :(得分:1)

  1. 创建不存在的外部网络-

    $ docker network create service || true

  2. 将外部网络定义为两个文件(第一个和第二个)-

    .........
       ports:
         - "8088:8088"
       networks:
         - service
    
     networks:
       service:
         external: true
    
  3. 执行up -d,现在您应该可以从service2容器中访问名称为service1的service1容器。

类似地,您也可以使用默认的create by网络,但是它将当前目录名添加到定义的网络名的前缀。您也可以使用主机网络模式,但不建议这样做。

更新1-

您可以根据需要拨打电话。如果您在shell上,则可以在shell技巧下进行操作,以使compose仅在不存在时创建网络,而在预先创建时忽略。
$ docker network create service || true

答案 1 :(得分:1)

两种方式:

1。  Service1Service2应该在同一网络中!!

docker network create -d overlay --attachable my_net

第一

...
  service1:
    ports:
      - "8081:8080"
    networks:
      - net
  ...
networks:
  net:
    external: true
    name: my_net

秒:

...
  service2:
    ports:
      - "8088:8088"
    networks:
      - net
  ...
networks:
  net:
    external: true
    name: my_net

在这种情况下,请求将为http://service1:8080/api/v1/test/

2。 您正在将端口转发到主机- "8081:8080" Docker主机的IP默认为 172.18.0.1 (请检查您的ifconfig

在这种情况下,请求将为http://172.18.0.1:8081/api/v1/test/


回答:“是否可能要求docker-compose创建网络(如果不存在)?”:

是可以的。 在“第一个”撰写文件中:

version: "3.3"
...
...
networks:
  my_net:
    driver: overlay
    attachable: true

如果您正在运行docker stack deploy -c file.yml hello ->将创建名称为hello_my_net的网络 如果您正在运行docker-compose up -d ->将使用名称directory-name_my_net(docker-compose.yml文件所在的目录名称)创建网络

所以请注意网络名称。

下一个服务将附加到该网络。

!注意。撰写文件的版本应为> =“ 3.3”