繁体   English   中英

使用 docker 组合运行解析服务器

[英]Running parse server with 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. 通过卷将 config.json 文件安装在 docker-compose 容器中,不起作用。
  4. 使用前面提到的开关运行命令,然后检查容器本身以检查文件是否存在,是的,它是。
  5. 将文件复制到默认情况下 parse-server 应使用的位置 ( /parse-server/bin )

问题:

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

非常感谢!

你能试试下面的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将覆盖CMD中的Dockerfile

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

FROM parseplatform/parse-server:4.2.0

COPY config.json config.json

EXPOSE 1337

CMD ["config.json"].  # Changed

go 通过您的问题:

  1. 不,实际的parse-server命令在容器运行时执行,复制命令在映像的构建时运行
  2. 您通过 docker 运行的命令与您在撰写命令中运行的命令不同: config.json/parse-server/bin/parse-server config.json

我会更改您的 docker-compose 以反映您使用 docker 运行的内容:

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
    # this is exactly what you are handing to vanilla docker
    command: "config.json"

并像docker-compose up -d一样运行它

但是,我认为您使用卷的建议要好一些,这样配置更改就不需要重新构建映像:

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
    volumes:
      - parse_vol:/path/to/config  # config is a folder in the container, mind you
    command: "/path/to/config/config.json"


volumes:
  parse_vol:
    driver: local
    driver-opts:
      o: bind
      type: none
      device: /local/path/to/config  # this is also a folder that contains config.json

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM