docker - 使用 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
我已经测试了几个场景(注意:不起作用意味着找不到配置文件):
- 在 docker -compose 中声明一个命令来运行 parse-server,并手动给--appId、--masterKey和--databaseURI开关,它可以工作。
- 在 docker-compose 中声明一个指向 config.json 文件的命令不起作用。
- 通过卷在 docker-compose 容器内挂载 config.json 文件不起作用。
- 使用前面提到的开关运行命令,然后检查容器本身以检查文件是否存在,是的,它是。
- 将文件复制到默认情况下 parse-server 应使用的位置 ( /parse-server/bin )
问题:
- 在 parse-server 命令执行后,配置文件被复制的可能性很小?
- 单独的 Dockerfile 怎么能正常工作,而在 docker-compose 文件中却不能工作?据我所知,它不会那么难,因为这是运行它的正确方法。
- 关于这有什么问题的任何提示?
非常感谢!
解决方案
你可以试试下面的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
in Dockerfile
。
或者,如果您不想在此处指定命令,则可以更改 Dockerfile。
FROM parseplatform/parse-server:4.2.0
COPY config.json config.json
EXPOSE 1337
CMD ["config.json"]. # Changed
推荐阅读
- ember.js - 我们不能在 glimmer 组件 getter 中放置一个 ember 并发任务,它正在跟踪组件参数
- git - Cygwin Symlinks .lnk 在 git clone 后不起作用
- artifactory - artifactory 不能以非法的 repo 名称开头
- laravel - Laravel 保护子对象的策略
- swift - 基于错误的枚举关联值,使用多个捕获和条件进行 Swift 错误处理
- sitemap - 如何在 Kentico Cloud 中管理站点地图?
- selenium-webdriver - 我正在尝试将值/文本发送到一个窗口,该窗口可通过 chrome 浏览器上的 Ctrl+F 键盘操作获得
- c# - 如何创建多语言低级全局键盘挂钩 c#
- c++ - 为什么“unsigned int”+“unsigned int”会返回“unsigned int”?
- javascript - Uncaught SyntaxError: missing ) after argument list ERROR ON JS