简体   繁体   English

docker-compose:容器之间没有连接

[英]docker-compose: no connection between containers

I have 3 microservices, and I run them with docker.我有 3 个微服务,我使用 docker 运行它们。

Dockerfile of each of them.他们每个人的 Dockerfile。 Frontend:前端:

FROM node:alpine
LABEL maintainer="2262288@gmail.com"
WORKDIR /usr/app/front
EXPOSE 3000
COPY ./ ./
RUN npm install
CMD ["npm", "start"]

Backend 1 (back):后端 1(背面):

FROM openjdk:8-jdk-alpine
LABEL maintainer="2262288@gmail.com"
VOLUME /tmp
EXPOSE 8099
ARG JAR_FILE=build/libs/auth-0.0.3.jar
ADD ${JAR_FILE} digital.jar
ENTRYPOINT ["java","-jar","/digital.jar"]

Backend 2 (message):后端 2(消息):

FROM openjdk:8-jdk-alpine
LABEL maintainer="2262288@gmail.com"
VOLUME /tmp
EXPOSE 8082
ARG JAR_FILE=build/libs/sender-0.0.1.jar
ADD ${JAR_FILE} sender.jar
ENTRYPOINT ["java","-jar","/sender.jar"]

Frontend send REST-request to backend1, than, backend1 send REST-request to backend2 (message).前端向后端1发送REST请求,然后后端1向后端2发送REST请求(消息)。

I published it on hub & run on external server in docker-compose:我将它发布在集线器上并在 docker-compose 的外部服务器上运行:

version: '3.7'版本:'3.7'

services:
  web:
    image: account/front:0.0.1
    restart: on-failure
    ports:
      - 80:3000
  back:
    image: account/back:0.0.3
    restart: on-failure
    ports:
      - 8099:8099
  message:
    image: account/message:0.0.1
    restart: on-failure
    ports:
      - 8082:8082

Backend services run on ports:后端服务在端口上运行:

message_1_e8eb3b2d2477 | 2019-09-24 09:34:00.882  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8082 (http) with context path ''

back_1_1982cc6e57f7 | 2019-09-24 09:34:07.403  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8099 (http) with context path ''

As we see, each service run on its own port.正如我们所见,每个服务都在自己的端口上运行。

Than, I try to send request to front -> back -> message.比,我尝试将请求发送到前面 -> 后面 -> 消息。 back send request to message & reseive answer:将请求返回到消息并重新接收答案:

java.net.ConnectException: Operation timed out (Connection timed out)

Than, requests to message service not reach it.比,对消息服务的请求无法到达它。

When I send request directly with Postman, it works.当我直接使用 Postman 发送请求时,它可以工作。

What's wrong?怎么了?

UPD. UPD。 request from front to back:从前到后的请求:

http://81.100.122.90:8099/auth/register
body:
{"username":"ksgcf","password":"123","firstName":"John","lastName":"Doe","email":"398456234785@gmail.com"}

request from back to message (IP changed):从返回到消息的请求(IP 已更改):

String url = "http://81.100.122.90:8082/email";
        EmailMessageDto request = new EmailMessageDto(
                dto.getEmail(),
                "slava_rossii@list.ru",
                "Email confirmation",
                "Press link: http://dig.lamb.ru/confirm?username="
                        + registrationToken.getUsername() + "&token=" + registrationToken.getToken()
        );

So, I see this message when docker-compose run for the first time:所以,当 docker-compose 第一次运行时,我看到了这条消息:

Creating network "project_default" with the default driver

First, when you use docker-compose all services are available via there names.首先,当您使用 docker-compose 时,所有服务都可以通过那里的名称获得。 So you can access message from back like this所以你可以像这样从后面访问消息

$ docker-compose exec back ping message
PING message (172.24.0.3) 56(84) bytes of data.
64 bytes from message (172.24.0.3): icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from message (172.24.0.3): icmp_seq=2 ttl=64 time=0.068 ms

Second, check port bindings.其次,检查端口绑定。 You have to bind 0.0.0.0 (not localhost which is default for most of the services and frameworks) to access to the service from other containers via network.您必须绑定 0.0.0.0(不是大多数服务和框架默认的 localhost)才能通过网络从其他容器访问服务。 It's same you get ordinary virtual machines.你得到普通的虚拟机是一样的。 You can check port availability with telnet您可以使用 telnet 检查端口可用性

As example I'm checking is postresql available on 5432 from container called superset例如,我正在检查 5432 上的 postresql 是否可以从名为 superset 的容器中获取

$ docker-compose exec superset telnet postgres 5432
Trying 172.24.0.3...
Connected to postgres.
Escape character is '^]'.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM