Я пытаюсь создать файл для создания докеров, который запускает API-интерфейс node.js graphql, который использует prisma и mongodb. Но я получаю сообщение об ошибке запрос к http://локальный:4466/ не удался, причина: подключение ECONNREFUSED 127.0.0.1:4466 всякий раз, когда пытаюсь отправить запросы с игровой площадки graphql, и ту же ошибку, когда запускаю развертывание prisma или просто пытаюсь пропинговать http:localhost:4466 изнутри контейнера graphql.
Я попытался использовать сеть по умолчанию и создать новую сеть, но получил ту же ошибку. Я пытался использовать ссылки (которые устарели) в версии 3, но также получил ту же ошибку.
P.S. Игровую площадку prisma я могу нормально открыть в браузере по ссылке: http://локальный: 4466
Это мой файл для создания докеров:
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:
А это 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
Есть ли что-то, что я неправильно понимаю, или что мне нужно исправить, чтобы заставить его работать?





Вы должны использовать http://prisma:4466 в качестве URL-адреса подключения в своем веб-контейнере. Поскольку ваши контейнеры будут подключены к одной и той же сети, имя контейнера будет DNS-именем и, следовательно, будет разрешено к IP-адресу конкретного контейнера.
localhost в вашем приложении Node указывает на контейнер, на котором запущен сам Node, а не на ваш хост-компьютер. Замените http://localhost:4466 на http://prisma:4466 или http://<host-machine-local-ip>:4466
Чтобы получить IP-адрес хоста на машине Unix, выполните:
hostname -i
Или
ifconfig | awk '/broadcast/ {print $2}'
Измените содержимое вашего prisma.yml с
endpoint: http://localhost:4466
datamodel: datamodel.prisma
к
endpoint: http://192.168.99.100:4466
datamodel: datamodel.prisma
Это сработало для меня.
Запустите свой контейнер докеров, введя флаг $ docker-compose up -d -d для запуска контейнера в режиме отсоединения.
Вместо использования конечной точки в качестве http://локальный: 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'
});