【问题标题】:RequestError connecting two docker containersRequestError 连接两个 docker 容器
【发布时间】:2018-06-16 02:54:32
【问题描述】:

我的 docker compose 中有 3 个容器:2 个网络服务器,1 个 mongodb 实例。 Weather-service 向 Main-service 发送 http 请求,因此在我的 docker 配置中,我链接了这两个容器。要从天气服务访问主服务容器,我使用此地址:http://main-service:3000 当我运行:docker-compose up --build 时,我收到连接错误。 天气服务 dockerfile:

FROM node:8-alpine

EXPOSE 4000

ARG NODE_ENV
ENV NODE_ENV $NODE_ENV

RUN mkdir /app
WORKDIR /app
ADD package.json yarn.lock /app/
RUN yarn --pure-lockfile
ADD . /app

CMD ["yarn", "docker:start"]

主服务dockerfile

FROM node:8-alpine

EXPOSE 3000

ARG NODE_ENV
ENV NODE_ENV $NODE_ENV

RUN apk update && apk upgrade && \
    apk add --no-cache bash git openssh

RUN mkdir /app
WORKDIR /app
ADD package.json yarn.lock /app/
RUN yarn --pure-lockfile
ADD . /app

CMD ["yarn", "docker:start"]

docker-compose.yml

version: "3"
services:
  main-service:
    build: main-service
    volumes:
      - .:/app/main-service
    ports:
      - "3000:3000"
    env_file:
      - ./main-service/.env
    networks:
      - app-network
    links:
      - weather-service

  weather-service:
    build: weather-service
    environment:
      - MONGO_URI=mongodb://mongodb:27017/forecast-data
    volumes:
      - .:/app/weather-service
    ports:
      - "4000:4000"
    env_file:
      - ./weather-service/.env
    networks:
      - app-network
    depends_on:
      - mongodb

  mongodb:
    image: mongo
    networks:
            - app-network
    ports:
      - "27017:27017"

networks:
  app-network:
    external: true

这是我收到的错误:

天气服务_1 | 0|索引 |请求错误:错误:连接 ECONNREFUSED 172.23.0.4:3000 天气服务_1 | 0|索引 |在 新的请求错误 (/app/node_modules/request-promise-core/lib/errors.js:14:15) 天气服务_1 | 0|索引 |在 Request.plumbing.callback (/app/node_modules/request-promise-core/lib/plumbing.js:87:29) 天气服务_1 | 0|索引 |在 Request.RP$callback [as _callback] (/app/node_modules/request-promise-core/lib/plumbing.js:46:31) mongodb_1 | 2018-01-06T13:46:19.281+0000 我存储 [conn2] createCollection: predict-data.refreshtokens 生成的 UUID: 85c26f12-464f-4d69-a969-713acf634c6f 天气服务_1 | 0|索引 | 在 self.callback (/app/node_modules/request/request.js:186:22) 天气服务_1 | 0|索引 |在 emitOne (events.js:116:13) 天气服务_1 | 0|索引 |在 Request.emit (events.js:211:7) 天气服务_1 | 0|索引 |在 Request.onRequestError (/app/node_modules/request/request.js:878:8) 天气服务_1 | 0|索引 |在 emitOne (events.js:116:13) 天气服务_1 | 0|索引 |在 ClientRequest.emit (events.js:211:7) 天气服务_1 | 0|索引 |在 Socket.socketErrorListener (_http_client.js:387:9) 天气服务_1 | 0|索引 |在 emitOne (events.js:116:13) 天气服务_1 | 0|索引 |在 Socket.emit (events.js:211:7) 天气服务_1 | 0|索引 |在 emitErrorNT (internal/streams/destroy.js:64:8) 天气服务_1 | 0|索引 |在 _combinedTickCallback (内部/进程/next_tick.js:138:11)weather-service_1 | 0|索引
|在 process._tickDomainCallback (内部/进程/next_tick.js:218:9)

【问题讨论】:

  • 您是否使用docker network create -d overlay app-network 创建了一个名为app-network 的网络?
  • 我用这个命令创建了应用网络:docker network create app-network
  • 你解决了吗?

标签: javascript node.js docker docker-compose dockerfile


【解决方案1】:

我建议在撰写堆栈文件中创建网络。

...
networks:
  app-network:
   driver: overlay

当您部署堆栈时,Docker 会创建给定的网络。 在 docker stack rm 上,Docker 移除网络。

“ECONNREFUSED”可能需要通过 tcp 进行通信。 在每个服务中将协议选项设置为 tcp:

ports:
      - target: 3000
        published: 3000
        protocol: tcp
        mode: ingress

https://blog.docker.com/2016/12/understanding-docker-networking-drivers-use-cases/ https://docs.docker.com/compose/compose-file/#endpoint_mode

【讨论】:

  • 我按照你说的修改了 compose 文件,现在我在运行 docker-compose up 时收到这个错误:ERROR: The Compose file './docker-compose.yml' is invalid because: services.main-service.ports is invalid: Invalid port "{'target': 3000, 'protocol': 'tcp', 'mode': 'ingress', 'published': 3000}", should be [[remote_ip:]remote_port[-remote_port]:]port[/protocol] services.main-service.ports contains an invalid type, it should be a string, or a number
  • 例如使用更高版本的 compose 文件 3.2 或更高版本,但请记住它需要 Docker Engine 版本:17.04.0+ 版本:'3.2'docs.docker.com/compose/compose-file/compose-versioning/…
猜你喜欢
  • 2018-03-01
  • 1970-01-01
  • 2021-11-24
  • 2021-01-26
  • 2020-01-06
  • 1970-01-01
  • 2019-04-20
  • 2019-10-27
  • 2021-09-22
相关资源
最近更新 更多