Расширить изображение prisma Docker другим слоем узла express image - PullRequest
0 голосов
/ 21 марта 2020

Я получил образ сервера призмы от dockerhub, который равен

prismagraphql/prisma:1.34

Для работы приведенного выше образа призмы для работы в PORT 4466 требуется строка подключения к базе данных, которая передается в качестве переменной среды с помощью docker -компонентный файл, как показано ниже

prisma:
   image: prismagraphql/prisma:1.34   
   ports:
     - "4466:4466"     
   environment:
     PRISMA_CONFIG: |
       port: 4466
       databases:
         default:
           connector: mongo
           uri: mongodb://mongodb   

Я пытаюсь расширить вышеуказанное изображение сервера prisma, как показано ниже.

FROM prismagraphql/prisma:1.34

RUN apk add  --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.7/main/ nodejs=8.9.3-r1

WORKDIR /project

COPY . .

# To handle 'not get uid/gid' error in alpine linux set unsafe-perm true
RUN apk update && apk upgrade \
    && npm config set unsafe-perm true \
    && npm install --g yarn \
    && npm install -g prisma \
    && yarn install \
    && chmod +x ./entrypoint.sh \
    && chmod +x ./wait-for-it.sh

EXPOSE 4466 4000

ENTRYPOINT ["./entrypoint.sh"]

Точка входа. sh Файл выглядит так

#!/bin/bash

# wait for the prisma service to start.
# then run prisma deploy (more on that later)
./wait-for-it.sh prisma:4466 -- prisma deploy

# go into the project...
cd /project

# run an npm command to use nodemon to start/watch the server
npm run start

В приведенном выше Dockerfile

  • Я пытаюсь установить nodejs приложение на существующем образе призмы от dockerhub.

  • Это приложение nodejs называется Prisma Nexus. nexus требует подключения к prisma на localhost: 4466, а nexus работает через порт 4000.

Когда я запускаю изображение ниже, я получаю эту ошибку. то есть nexus (nodejs app) не может подключиться к prisma

Could not connect to server at http://localhost:4466. Please check if your server is running.

Наконец-то я запускаю расширенное изображение вот так


 mongodb:
   image: mongo:4.2
   container_name: mongodb
   volumes:
     - ./mongo-volume:/data/db
   ports:
     - "27017:27017"
   networks:
     - prisma

  prisma:
   image: extended-image-here:1.0
   container_name: prisma-server
   restart: always
   ports:
     - "4466:4466"
     - "4000:4000"
   environment:
     PRISMA_CONFIG: |
       port: 4466
       databases:
         default:
           connector: mongo
           uri: mongodb://mongodb

Что я здесь делаю? Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 21 марта 2020

Первое: в вашем коде вы помещаете контейнер MongoDB в указанную c сеть с именем prisma, но вы не делаете то же самое с контейнером призмы. При использовании compose контейнеры в одной и той же оверлейной сети разрешаются по имени, но запросы будут перенаправляться между контейнерами только в том случае, если они находятся в одной сети.

Далее: вы не должны запускать два сервера в тот же контейнер. Лучше вообще не создавать свое приложение поверх образа призмы, а вместо этого строить его поверх alpine или ubuntu (или чего-то еще). Он должен подключиться к другому контейнеру, где работает сервер prisma. В комментариях вы говорите, что действительно хотите это сделать, но на самом деле не должны. Не так сложно запустить составную конфигурацию на сервере клиента, а не в отдельном контейнере, но гораздо сложнее запустить 2 сервера в одном контейнере.

Наконец: ссылка на локальный хост (как вы говорите? ) должен быть каким-то образом настраиваемым. Узнайте, как, и попросите его указать что-то вроде 'http://prisma: 4466 '. Таким образом, у вас будет 3 контейнера - mongodb, prisma и ваше собственное приложение.

0 голосов
/ 21 марта 2020

Я думаю, причина, по которой это не работает, заключается в том, что образ prismagraphql / prisma: 1.34 имеет точку входа, а в конце файла Docker есть другая точка входа. Docker принимает только одну точку входа в Dockerfile ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...