带有 docker-compose 的解析仪表板:无法连接到服务器

Posted

技术标签:

【中文标题】带有 docker-compose 的解析仪表板:无法连接到服务器【英文标题】:parse-dashboard w/ docker-compose: unable to connect to server 【发布时间】:2018-01-25 12:04:25 【问题描述】:

我使用 docker-compose 配置了一个小集群,由 parse-server、mongo 和 parse-dashboard 组成:

  version: "3"
  services:
  myappdb:
    image: mongo
    ports:
      - 27017:27017
  myapp-parse-server:
    image: parseplatform/parse-server
    environment:
      - PARSE_SERVER_MASTER_KEY=xxxx
      - PARSE_SERVER_APPLICATION_ID=myapp
      - VERBOSE=0
      - PARSE_SERVER_DATABASE_URI=mongodb://myappdb:27017/dev
      - PARSE_SERVER_URL=http://myapp-parse-server:1337/parse
    depends_on:
      - myappdb
    ports:
      - 5000:1337
  parse-dashboard:
    image: parseplatform/parse-dashboard
    ports:
      - 5001:4040
    environment:
      - PARSE_DASHBOARD_ALLOW_INSECURE_HTTP=1
      - PARSE_DASHBOARD_SERVER_URL=http://myapp-parse-server:1337/parse
      - PARSE_DASHBOARD_APP_ID=myapp
      - PARSE_DASHBOARD_MASTER_KEY=xxxx
      - PARSE_DASHBOARD_USER_ID=admin
      - PARSE_DASHBOARD_USER_PASSWORD=xxxx

尽我所能,但是,我无法让部署的 parse-dashboard 连接到 myapp-parse-server。在我使用浏览器(在 localhost:5001)登录仪表板后,仪表板应用程序通知我它“无法连接到服务器”。

我尝试从 parse-dashboard 容器 ping 主机“myapp-parse-server”,它可以很好地看到容器。同样可以看到端点http://myapp-parse-server:1337/parse; wget 返回预期的 403。

如果我使用在我的主机上运行的 parse-dashboard 的副本,它对http://localhost:5000/parse 工作得很好。所以从我的主机到解析服务器的转发端口是有效的。

我还尝试使用安装在容器中的 parse-dashboard-config.json 配置仪表板。产生完全相同的结果。

我不知道我在这里做错了什么。任何人都可以对此有所了解吗?

【问题讨论】:

【参考方案1】:

您的 docker-compose 文件似乎有一些问题:

    PARSE_SERVER_URL 指向 myapp-parse-server 并且它应该指向 http://localhost:1337/parse (除非您以某种方式修改了容器上的主机文件,但我没有看到它)

    您的 myapp-parse-server 应该使用 links

    link 到您的数据库

这是我在how to deploy parse-server to google container enginee 上写的一篇博客中的 docker-compose 文件示例

version: "2"
services:
# Node.js parse-server application image
  app:
    build: ./app
    command: npm start -- /parse-server/config/config.json
    container_name: my-parse-app
    volumes:
    - ./app:/parse-server/
    - /parse-server/node_modules
    ports:
    - "1337:1337"
    links:
    - mongo
# MongoDB image 

  mongo:
    image: mongo
    container_name: mongo-database
    ports:
    - "27017:27017"
    volumes_from:
    - mongodata
# MongoDB image volume for persistence
  mongodata:
    image: mongo
    volumes:
    - ./data/db:/data/db
    command:
    - --break-mongo

您可以从上面的示例中看到,我使用 links 并且还为数据库磁盘创建和附加卷。

另外,我个人认为最好使用配置文件运行 parse-server 以解耦所有配置,因此我的配置文件如下所示(在我的 docker compose 中,您可以看到我正在运行带有配置的解析服务器文件而不是环境变量)


"databaseURI": "mongodb://localhost:27017/my-db",
"appId": "myAppId",
"masterKey": "myMasterKey",
"serverURL": "http://localhost:1337/parse",
"cloud": "./cloud/main.js",
"mountPath": "/parse",
"port": 1337

最后,在我的 parse-dashboard 图像中,我还使用了配置文件并将其简单地创建为卷,然后用我自己的 替换默认配置文件。因为我的博客中没有介绍这一步,所以最终的 docker-compose 文件应该如下所示:

version: "2"
services:
# Node.js parse-server application image
  app:
    build: ./app
    command: npm start -- /parse-server/config/config.json
    container_name: my-parse-app
    volumes:
    - ./app:/parse-server/
    - /parse-server/node_modules
    ports:
    - "1337:1337"
    links:
    - mongo
# MongoDB image 

  mongo:
    image: mongo
    container_name: mongo-database
    ports:
    - "27017:27017"
    volumes_from:
    - mongodata
# MongoDB image volume for persistence
  mongodata:
    image: mongo
    volumes:
    - ./data/db:/data/db
    command:
    - --break-mongo
    
  dashboard:
    image: parseplatform/parse-dashboard:1.1.0
    volumes:
      - ./dashboard/dashboard-config.json:/src/Parse-Dashboard/parse-dashboard-config.json   
    environment:
      PORT: 4040
      PARSE_DASHBOARD_ALLOW_INSECURE_HTTP: 1
      ALLOW_INSECURE_HTTP: 1
      MOUNT_PATH: "/parse"

parse-dashboard.json(配置文件)应该是:

“应用”: [ "serverURL": "http://localhost:3000/parse", "appId": "myMasterKey", "masterKey": "myMasterKey", "appName": "我的应用" ], “用户”:[ “用户”:“我的用户”, “通过”:“我的密码” ], “useEncryptedPasswords”:假

我知道它有点长,所以我真的鼓励你阅读这个系列的博客。

希望对你有所帮助。

【讨论】:

根据docs.docker.com/compose/compose-file/#links,链接已被弃用... 将我的服务器 url 设置为 localhost 没有任何意义?服务器和仪表板在不同的 Docker 容器中运行。仪表板容器上的 localhost:1337 不会命中解析服务器,因为它在不同的容器上运行。 嗨,这不相关。 docker 容器在您的本地机器上运行并使用端口转发 1337 --> 1337 所以最终它在您的机器上运行。这同样适用于在端口 4040 上运行的 parse-dashboard。在 parse-dashboard 配置中,您需要提供运行解析服务器的 URL。如果您按照我的博客进行操作,它将 100% 为您工作,因为它在我正在从事的 5 个以上的解析服务器项目中工作...... 我无法假装理解为什么,但是将仪表板配置中的 PARSE_SERVER_URL 更改为 localhost:1337 就可以了。谢谢。 您也可以使用内部主机技巧来做到这一点,但是您需要确保解析服务器容器“知道”解析仪表板容器。它的工作方式类似于 Kubernetes 中的选择器和标签

以上是关于带有 docker-compose 的解析仪表板:无法连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章

云原生之Docker实战使用Docker部署Homepage应用程序仪表盘

如何从终端访问解析客户端密钥?

将服务器推送通知解析到特定用户问题

带有 docker-compose 的 VScode 调试器

尝试使用带有自定义 conf.d 的 docker-compose 运行 nginx 时出错

带有 GITLAB_OMNIBUS_CONFIG 的 Docker-Compose.yml 不起作用