如何在 docker 个容器中连接 graphql 和 prisma?
How to connect graphql and prisma in docker containers?
我正在尝试构建一个 docker-compose 文件,该文件 运行 一个使用 prisma 和 mongodb 的 node.js graphql api。
但是我收到错误 请求 http://localhost:4466/ 失败,原因:连接 ECONNREFUSED 127.0.0.1:4466 每当我尝试从 graphql 游乐场发送请求时,当我 运行 prisma deploy 或者只是尝试从 graphql 容器内部 ping http:localhost:4466。
我尝试使用默认网络并创建新网络,但我遇到了同样的错误。
我曾尝试在版本 3 中使用 links(已弃用),但我也遇到了同样的错误。
P.S 我可以在浏览器中使用 link 正常打开 prisma 的游乐场: 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:
这是网络服务的 docker 文件:
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
有什么我误解的地方,或者我需要修正什么才能让它正常工作吗?
您应该使用 http://prisma:4466
作为网络容器中的连接 URL。由于您的容器将连接到同一网络,因此容器的名称将是 DNS 名称,因此将解析为具体容器的 IP。
您的 Node 应用程序中的 localhost
指向容器 运行ning Node 本身,而不是您的主机。将 http://localhost:4466
替换为 http://prisma:4466
或 http://<host-machine-local-ip>:4466
获取 Unix 机器上的主机 IP 运行:
hostname -i
或者
ifconfig | awk '/broadcast/ {print }'
将您的 prisma.yml
的内容从
endpoint: http://localhost:4466
datamodel: datamodel.prisma
至
endpoint: http://192.168.99.100:4466
datamodel: datamodel.prisma
这对我有用。
运行 你的 docker 容器通过输入 $docker-compose up -d -d flag is for 运行容器处于分离模式。
而不是将端点用作 http://localhost:4466 use http://127.0.1.1:4466 或者通过命令检查您的本地主机:$localhost -i。
在 prisma-binding 中,您的构造函数的端点应为 http://127.0.1.1:4466.
const prisma = new Prisma({
typeDefs: './src/generated/prisma.graphql',
endpoint: 'http://127.0.1.1:4466'
});
我正在尝试构建一个 docker-compose 文件,该文件 运行 一个使用 prisma 和 mongodb 的 node.js graphql api。 但是我收到错误 请求 http://localhost:4466/ 失败,原因:连接 ECONNREFUSED 127.0.0.1:4466 每当我尝试从 graphql 游乐场发送请求时,当我 运行 prisma deploy 或者只是尝试从 graphql 容器内部 ping http:localhost:4466。
我尝试使用默认网络并创建新网络,但我遇到了同样的错误。 我曾尝试在版本 3 中使用 links(已弃用),但我也遇到了同样的错误。
P.S 我可以在浏览器中使用 link 正常打开 prisma 的游乐场: 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:
这是网络服务的 docker 文件:
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
有什么我误解的地方,或者我需要修正什么才能让它正常工作吗?
您应该使用 http://prisma:4466
作为网络容器中的连接 URL。由于您的容器将连接到同一网络,因此容器的名称将是 DNS 名称,因此将解析为具体容器的 IP。
您的 Node 应用程序中的 localhost
指向容器 运行ning Node 本身,而不是您的主机。将 http://localhost:4466
替换为 http://prisma:4466
或 http://<host-machine-local-ip>:4466
获取 Unix 机器上的主机 IP 运行:
hostname -i
或者
ifconfig | awk '/broadcast/ {print }'
将您的 prisma.yml
的内容从
endpoint: http://localhost:4466
datamodel: datamodel.prisma
至
endpoint: http://192.168.99.100:4466
datamodel: datamodel.prisma
这对我有用。
运行 你的 docker 容器通过输入 $docker-compose up -d -d flag is for 运行容器处于分离模式。
而不是将端点用作 http://localhost:4466 use http://127.0.1.1:4466 或者通过命令检查您的本地主机:$localhost -i。 在 prisma-binding 中,您的构造函数的端点应为 http://127.0.1.1:4466.
const prisma = new Prisma({
typeDefs: './src/generated/prisma.graphql',
endpoint: 'http://127.0.1.1:4466'
});