我有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]
我该如何解决?
答案 0 :(得分:1)
创建不存在的外部网络-
$ docker network create service || true
将外部网络定义为两个文件(第一个和第二个)-
.........
ports:
- "8088:8088"
networks:
- service
networks:
service:
external: true
up -d
,现在您应该可以从service2容器中访问名称为service1
的service1容器。 类似地,您也可以使用默认的create by网络,但是它将当前目录名添加到定义的网络名的前缀。您也可以使用主机网络模式,但不建议这样做。
更新1-
您可以根据需要拨打电话。如果您在shell上,则可以在shell技巧下进行操作,以使compose仅在不存在时创建网络,而在预先创建时忽略。
$ docker network create service || true
答案 1 :(得分:1)
两种方式:
1。
Service1
和Service2
应该在同一网络中!!
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”