sab*_*sab 3 docker docker-compose docker-ce
我正在尝试使用以下命令从命令行获取变量:
sudo docker-compose -f docker-compose-fooname.yml run -e BLABLA=hello someservicename
Run Code Online (Sandbox Code Playgroud)
我的文件如下所示:
version: '3'
services:
someservicename:
environment:
- BLABLA
image: docker.websitename.com/image-name:latest
volumes:
- /var/www/image-name
command: ["npm", "run", BLABLA]
Run Code Online (Sandbox Code Playgroud)
所有这一切都是为了我可以运行由我在命令行中使用的 BLABLA 定义的脚本,我已经尝试使用官方文档。
尝试了几种选择,包括:
sudo COMPOSE_OPTIONS="-e BLABLA=hello" docker-compose -f docker-compose-fooname.yml run someservicename
Run Code Online (Sandbox Code Playgroud)
更新:我不得不提的是,事实上,我总是得到:
WARNING: The FAKE_SERVER_MODE variable is not set. Defaulting to a blank string.
Run Code Online (Sandbox Code Playgroud)
即使我只是运行以下命令(无论是删除,停止..):
sudo docker-compose -f docker-compose-fooname.yml stop someservicename
Run Code Online (Sandbox Code Playgroud)
郑重声明:我首先拉取映像,我从不构建它,但我的 CI/CD 工具会构建它(gitlab),这会影响它吗?
我正在使用 docker-compose 版本 1.18、docker 版本 18.06.1-ce、Ubuntu 16.04
该docker-compose.yml语法并不按您期望的方式工作。如果你写:
command: ["npm", "run", BLABLA]
Run Code Online (Sandbox Code Playgroud)
YAML 解析器会将其转换为三个字符串npm、run、 和的列表BLABLA,当 Docker Compose 看到该列表时,它将尝试运行确切的命令,而不运行 shell 来尝试解释任何内容。
如果将其设置为字符串,Docker 将在其上运行一个 shell,该 shell 将扩展环境变量;尝试
command: "npm run $BLABLA"
Run Code Online (Sandbox Code Playgroud)
话虽如此,Docker Compose 的使用有点奇怪。正如services:关键所暗示的,更常见的用例是启动一组长期运行的服务docker-compose up;您可能npm run start会或某些服务(例如服务),但通常不会有一个没有默认值的完全可参数化的块。
我可能会docker-compose.yml公正地说
version: '3'
services:
someservicename:
image: docker.websitename.com/image-name:latest
command: ["npm", "run", "start"]
Run Code Online (Sandbox Code Playgroud)
如果我确实需要运行其他东西,请运行
docker-compose run --rm someservicename npm run somethingelse
Run Code Online (Sandbox Code Playgroud)
(或者只使用我本地的./node_modules/.bin/somethingelse而不涉及 Docker)
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |