首页 > 解决方案 > 使用 docker compose 运行解析服务器

问题描述

我有一个场景,我需要从 Dockerfile 运行解析服务器,并且该 docker 文件应该在 docker-compose 中运行。另外,我需要将配置外部化为 json 文件。

主要问题是,如果我在 docker-compose 中运行此 Dockerfile,则找不到配置文件。

这是我的 dockerfile 声明:

FROM parseplatform/parse-server:4.2.0

COPY config.json config.json

EXPOSE 1337

CMD ["/parse-server/bin/parse-server", "config.json"]

这是我的 config.json 文件:

{
  "appId": "appId",
  "masterKey": "masterKey",
  "databaseURI": "mongodb://usr:pass@mongodb:27017"
}

这工作正常,就像我构建它并运行它一样:

docker build -f Dockerfile -t parse  .

docker run --name parse  -p 1337:1337 -d parse config.json

它工作正常,简而言之,docker日志中的重要行是这样的:

Configuration loaded from /parse-server/config.json

但是,如果我尝试以这种方式在 docker-compose 文件中运行它:

version: '3.5'

services:
  db:
    image: mongo
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: usr
      MONGO_INITDB_ROOT_PASSWORD: pass

  parse:
    build: .
    ports:
      - 1337:1337
    depends_on:
      - db

它不起作用,它只是打印解析服务器帮助以及以下行:

Configuration loaded from /parse-server/bin/parse-server

我已经测试了几个场景(注意:不起作用意味着找不到配置文件):

  1. 在 docker -compose 中声明一个命令来运行 parse-server,并手动给--appId--masterKey--databaseURI开关,它可以工作。
  2. 在 docker-compose 中声明一个指向 config.json 文件的命令不起作用。
  3. 通过卷在 docker-compose 容器内挂载 config.json 文件不起作用。
  4. 使用前面提到的开关运行命令,然后检查容器本身以检查文件是否存在,是的,它是。
  5. 将文件复制到默认情况下 parse-server 应使用的位置 ( /parse-server/bin )

问题:

  1. 在 parse-server 命令执行后,配置文件被复制的可能性很小?
  2. 单独的 Dockerfile 怎么能正常工作,而在 docker-compose 文件中却不能工作?据我所知,它不会那么难,因为这是运行它的正确方法。
  3. 关于这有什么问题的任何提示?

非常感谢!

标签: dockerdocker-composedockerfile

解决方案


你可以试试下面的docker-compose.yml

version: '3.5'

services:
  db:
    image: mongo
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: usr
      MONGO_INITDB_ROOT_PASSWORD: pass

  parse:
    build: .
    command: "config.json"
    ports:
      - 1337:1337
    depends_on:
      - db

command将覆盖CMDin Dockerfile

或者,如果您不想在此处指定命令,则可以更改 Dockerfile。

FROM parseplatform/parse-server:4.2.0

COPY config.json config.json

EXPOSE 1337

CMD ["config.json"].  # Changed

推荐阅读