从本地另一个容器内连接到 dockerized REST Jax RS 端点

Connecting to a dockerized REST JaxRS end point from within another container locally

我正在尝试连接到 JaxRS liferay portlet 的休息端点。 如果我尝试使用 http://localhost:8078/engine-rest/process-definition

通过邮递员连接

它工作 200 没问题。

我正在尝试从同一 docker 网络的另一个 docker 容器部分连接到同一端点,我已尝试使用本地主机,但收到错误消息:

java.net.ConnectException: Connection refused (Connection refused)

我也试过http://wasp-engine:8078,wasp-engine是容器的docker名称。仍然收到相同的错误。

这是我的 compose 文件中的两个容器:

wasp-engine:
  image: in/digicor-engine:test
  container_name: wasp-engine
  ports:
    - "8078:8080"
  depends_on:
    mysql:
      condition: service_healthy

wasp:
  image: in/wasp:local2
  container_name: Wasp
  volumes:
    - liferay-document-library:/opt/liferay/data
  environment:
    - camundaEndPoint=http://wasp-engine:8078
  ports:
    - "8079:8080"
  depends_on:
    mysql:
      condition: service_healthy

它们都连接到属于同一 docker 网络的 mysql fine,并通过以下方式引用:

jdbc.default.url=jdbc:mysql://mysql/liferay_test

tl;博士

使用http://wasp-engine:8080

原因

在您的 docker-中编写 ports: - "8078:8080" wasp-engine 上的字段会将 docker 容器的端口 8080 暴露给主机的端口 8078。这就是使您的邮递员能够通过本地主机成功连接到容器的原因。但是,一旦在 docker 容器内,localhost 指的是 docker 容器本身。此端口转发不再适用。

使用 docker-compose 您可以使用容器的名称来定位特定的 docker 容器。您提到您使用 URI http://wasp-engine:8078 尝试过此操作。当您以这种方式访问​​容器时,将使用原始端口而不是主机的转发端口。这意味着 docker 容器应该以端口 8080 为目标。

将它们放在一起,最终的 URI 应该是 http://wasp-engine:8080