0

我从 dockerhub 获得了一个 prisma 服务器映像,它是

prismagraphql/prisma:1.34

为了在端口 4466 上运行,上面的 prisma 映像需要数据库连接字符串,并且使用 docker-compose 文件将其作为环境变量传递,如下所示

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"]

entrypoint.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

  • 我尝试在 dockerhub 的现有 prisma 映像上安装 nodejs 应用程序。

  • 这个 nodejs 应用程序称为 prisma nexus。nexus 需要连接到 localhost:4466 上的 prisma,并且 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

我在这是要干嘛?请帮忙。

4

2 回答 2

0

首先:在您的代码中,您将 MongoDB 容器放在一个名为的特定命名网络上,prisma但您不会对 prisma 容器做同样的事情。使用 compose 时,同一覆盖网络上的容器按名称解析,但只有在同一网络上的容器之间才会路由请求。

下一步:您不应该在同一个容器中运行两台服务器。最好不要在 prisma 映像之上构建您的应用程序,而是在 alpine 或 ubuntu(或其他任何东西)之上构建它。它应该连接到另一个运行 prisma 服务器的容器。在评论中你说你真的想这样做,但你真的不应该这样做。在客户端服务器而不是单个容器上运行 compose 配置并不难,但在单个容器中运行 2 个服务器要困难得多。

最后:本地主机引用(你说的关系?)应该以某种方式配置。找出方法,并让它解决类似“ http://prisma:4466 ”之类的问题。通过这种方式,您将拥有 3 个容器——mongodb、prisma 和您自己的应用程序。

于 2020-03-21T15:30:37.007 回答
0

我猜它不起作用的原因是因为图像 prismagraphql/prisma:1.34 有一个入口点,并且在 Dockerfile 的末尾还有另一个入口点。Docker 只接受 Dockerfile 中的单个入口点...

于 2020-03-21T10:38:42.433 回答