Spring boot + docker + rest 模板连接被拒绝
Spring boot + docker + rest template connection refused
我有两个服务,spring 启动 docker,当我尝试与 rest 模板通信时,我得到 java.net.ConnectException: Connection refused (Connection refused)
url 是 http://localhost:8081/api/v1/package/250Mbps
服务 1 docker-compose.yml:
product_catalogue_service:
image: openjdk:8-jdk-alpine
ports:
- "8081:8081"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
服务 2 docker-compose.yml:
order_service:
image: openjdk:8-jdk-alpine
ports:
- "8083:8083"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
Rest 模板 URL,当我从 IntelliJ 运行 项目 2 时它正在工作:
http://localhost:8081/api/v1/package/250Mbps
当我运行dockerps时,第一个服务的名字是:
productcatalogueservice_product_catalogue_service_1
我尝试使用它而不是 localhost - 未知主机异常。
我尝试了 "product_catalogue_service_1",同样是未知主机异常,
最后我尝试了 "product_catalogue_service" 也是未知的主机异常。
有什么想法吗?
默认情况下,docker-compose 在您的容器之间创建一个网络,并将服务名称指定为主机名。
因此,您可以像这样从 order_service
到达 product_catalog_service
:http://product_catalog_service:8081/api/v1/package/250Mbps
现在,从您的 post 看来,您有两个不同的 docker-compose.yml 文件,每个服务一个。在这种情况下,每个容器都生活在自己的网络中(由 docker-compose 创建)并且它们彼此看不到,至少在默认情况下是这样。
老实说,我从来没有尝试连接从两个不同的 docker-compose 文件创建的两个容器。我总是创建一个 docker-compose.yml 文件,把我所有的服务放在那里,让 docker-compose 管理它们之间的网络。
使用一个 docker-compose.yml
version: ...
services:
product_catalogue_service:
image: openjdk:8-jdk-alpine
ports:
- "8081:8081"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
order_service:
image: openjdk:8-jdk-alpine
ports:
- "8083:8083"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
最后一件事,answer 非常详细地解释了为什么 localhost:8081
无法在您的 order_service
容器中工作。
我有两个服务,spring 启动 docker,当我尝试与 rest 模板通信时,我得到 java.net.ConnectException: Connection refused (Connection refused)
url 是 http://localhost:8081/api/v1/package/250Mbps
服务 1 docker-compose.yml:
product_catalogue_service:
image: openjdk:8-jdk-alpine
ports:
- "8081:8081"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
服务 2 docker-compose.yml:
order_service:
image: openjdk:8-jdk-alpine
ports:
- "8083:8083"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
Rest 模板 URL,当我从 IntelliJ 运行 项目 2 时它正在工作: http://localhost:8081/api/v1/package/250Mbps
当我运行dockerps时,第一个服务的名字是: productcatalogueservice_product_catalogue_service_1
我尝试使用它而不是 localhost - 未知主机异常。
我尝试了 "product_catalogue_service_1",同样是未知主机异常, 最后我尝试了 "product_catalogue_service" 也是未知的主机异常。
有什么想法吗?
默认情况下,docker-compose 在您的容器之间创建一个网络,并将服务名称指定为主机名。
因此,您可以像这样从 order_service
到达 product_catalog_service
:http://product_catalog_service:8081/api/v1/package/250Mbps
现在,从您的 post 看来,您有两个不同的 docker-compose.yml 文件,每个服务一个。在这种情况下,每个容器都生活在自己的网络中(由 docker-compose 创建)并且它们彼此看不到,至少在默认情况下是这样。
老实说,我从来没有尝试连接从两个不同的 docker-compose 文件创建的两个容器。我总是创建一个 docker-compose.yml 文件,把我所有的服务放在那里,让 docker-compose 管理它们之间的网络。
使用一个 docker-compose.yml
version: ...
services:
product_catalogue_service:
image: openjdk:8-jdk-alpine
ports:
- "8081:8081"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
order_service:
image: openjdk:8-jdk-alpine
ports:
- "8083:8083"
volumes:
- .:/app
working_dir: /app
command: ./gradlew bootRun
restart: on-failure
最后一件事,answer 非常详细地解释了为什么 localhost:8081
无法在您的 order_service
容器中工作。