如何在docker容器中连接graphql和prisma?

时间:2019-07-13 07:15:32

标签: node.js docker docker-compose graphql prisma

我正在尝试构建一个docker-compose文件,该文件运行一个使用prisma和mongodb的node.js graphql api。 但是我收到错误的http://localhost:4466/的请求失败,原因是:每当我尝试从graphql操场发送请求时,都连接ECONNREFUSED 127.0.0.1:4466 ,并且在运行Arizona部署或只需尝试从graphql容器内部ping http :: localhost:4466。

我尝试使用默认网络并创建新网络,但是出现相同的错误。 我试图在版本3中使用链接(不建议使用),但是我也遇到了同样的错误。

P.S我可以通过http://localhost:4466

链接在浏览器中正常打开棱镜的游乐场。

这是我的docker-compose文件:

version: '3'
services:
  web:
    build: .
    networks: 
      net:
    ports:
    - "80:4000"
    command: wait-for-it/wait-for-it.sh http://localhost:4466 -t 30 -- ./run.sh
  prisma:
    image: prismagraphql/prisma:1.34
    restart: always
    networks: 
      net:
    ports:
    - "4466:4466"
    environment:
      PRISMA_CONFIG: |
        port: 4466
        # uncomment the next line and provide the env var PRISMA_MANAGEMENT_API_SECRET=my-secret to activate cluster security
        # managementApiSecret: my-secret
        databases:
          default:
            connector: mongo
            uri: mongodb://prisma:prisma@mongo
    command: /bin/sh.sh
  mongo:
    image: mongo:3.6
    restart: always
    networks: 
      net:
    environment:
      MONGO_INITDB_ROOT_USERNAME: prisma
      MONGO_INITDB_ROOT_PASSWORD: prisma
    ports:
      - "27017:27017"
    volumes:
      - mongo:/var/lib/mongo
volumes:
  mongo:
networks: 
      net:

这是Web服务的dockerfile:

FROM node:10

WORKDIR /app

COPY . /app/

RUN yarn install --pure-lockfile 

RUN yarn global add prisma

这是run.sh文件:

echo "prisma deploy command "
prisma deploy
echo "get-schema command"
yarn run get-schema
echo "starting command"
yarn run start 

有什么我误会的东西,或者我需要修正使其工作吗?

4 个答案:

答案 0 :(得分:1)

您应使用http://prisma:4466作为Web容器中的连接URL。由于您的容器将连接到同一网络,因此容器的名称将为DNS名称,因此将解析为具体容器的IP。

答案 1 :(得分:1)

Node应用程序中的localhost指向运行Node本身而不是主机的容器。将http://localhost:4466替换为http://prisma:4466http://<host-machine-local-ip>:4466

要在Unix计算机上获取主机IP,请运行:

hostname -i

ifconfig | awk '/broadcast/ {print $2}' 

答案 2 :(得分:0)

从{p>更改prisma.yml的内容

endpoint: http://localhost:4466
datamodel: datamodel.prisma

endpoint: http://192.168.99.100:4466
datamodel: datamodel.prisma

这对我有用。

答案 3 :(得分:0)

通过键入 $ docker-compose up -d 运行您的Docker容器-d标志用于在分离模式下运行容器。

不要使用终结点作为 http://localhost:4466 ,而是使用 http://127.0.1.1:4466 或通过cmd检查您的本地主机:$ localhost -i。 在棱柱绑定中,构造函数的端点应为 http://127.0.1.1:4466

const prisma = new Prisma({
    typeDefs: './src/generated/prisma.graphql',
    endpoint: 'http://127.0.1.1:4466'
});