无法使用 docker-compose 运行 -e 选项传递环境变量
Can't pass environment variables with the docker-compose run -e option
我正在尝试使用以下命令从命令行获取变量:
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 的脚本定义的脚本,我尝试使用 official documentation。
尝试了几个选项,包括:
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 解析器会将其转换为包含三个字符串 npm
、run
和 BLABLA
的列表,当 Docker Compose 看到该列表时,它将尝试运行 从字面上看就是那个确切的命令,没有 运行ning shell 试图解释任何东西。
如果你把它设置成一个字符串,Docker会运行一个shell覆盖它,shell会扩展环境变量;尝试
command: "npm run $BLABLA"
话虽如此,Docker Compose 的使用有点奇怪。正如 services:
键所暗示的,更常见的用例是使用 docker-compose up
启动一些长期 运行ning 服务;您可能 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)
我正在尝试使用以下命令从命令行获取变量:
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 的脚本定义的脚本,我尝试使用 official documentation。
尝试了几个选项,包括:
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 解析器会将其转换为包含三个字符串 npm
、run
和 BLABLA
的列表,当 Docker Compose 看到该列表时,它将尝试运行 从字面上看就是那个确切的命令,没有 运行ning shell 试图解释任何东西。
如果你把它设置成一个字符串,Docker会运行一个shell覆盖它,shell会扩展环境变量;尝试
command: "npm run $BLABLA"
话虽如此,Docker Compose 的使用有点奇怪。正如 services:
键所暗示的,更常见的用例是使用 docker-compose up
启动一些长期 运行ning 服务;您可能 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)