无法使用 docker-compose run -e 选项传递环境变量



我正试图使用从命令行获取变量

sudo docker-compose -f docker-compose-fooname.yml run -e BLABLA=hello someservicename

我的文件如下:

version: '3'
services:
someservicename:
environment:
- BLABLA
image: docker.websitename.com/image-name:latest
volumes:
- /var/www/image-name
command: ["npm", "run", BLABLA]

所有这些都是为了让我可以在命令行中运行一个由我使用的BLABLA定义的脚本,我已经尝试使用官方文档。

尝试了几个选项,包括:

sudo COMPOSE_OPTIONS="-e BLABLA=hello" docker-compose -f docker-compose-fooname.yml run someservicename

更新:我不得不提的是,事实上,我总是得到:

WARNING: The FAKE_SERVER_MODE variable is not set. Defaulting to a blank string.

即使我只是运行以下命令(无论是删除、停止..(:

sudo docker-compose -f docker-compose-fooname.yml stop someservicename

记录在案:我首先提取图像,我从未构建过它,但我的CI/CD工具(gitlab(构建了它,这会影响它吗?

我使用的是docker compose版本1.18,docker版本18.06.1-ce,Ubuntu 16.04

docker-compose.yml语法不能按您期望的方式工作。如果你写:

command: ["npm", "run", BLABLA]

YAML解析器会将其转换为一个由三个字符串npmrunBLABLA组成的列表,当Docker Compose看到该列表时,它会尝试运行完全相同的命令,而不运行shell来尝试解释任何内容。

如果将其设置为字符串,Docker将在其上运行一个shell,该shell将扩展环境变量;尝试

command: "npm run $BLABLA"

话虽如此,这是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"]

如果我真的需要运行其他程序,运行

docker-compose run --rm someservicename npm run somethingelse

(或者只使用我的本地./node_modules/.bin/somethingelse,根本不涉及Docker(

最新更新