gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:10:53 24 4
gpt4 key购买 nike

我正在尝试使用以下命令从命令行获取变量:

 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 解析器会将其转换为包含三个字符串 npmrunBLABLA 的列表,当 Docker Compose 看到该列表时它将尝试按字面意思运行确切的命令,而不运行 shell 来尝试解释任何内容。

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

command: "npm run $BLABLA"

话虽如此,Docker Compose 的使用有点奇怪。正如 services: 键所暗示的,更常见的用例是使用 docker-compose up 启动一些长期运行的服务;你可能会 npm run start 或诸如服务之类的东西,但你通常不会有一个没有默认值的完全可参数化的 block 。

我可能会让 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)

关于docker - 无法使用 docker-compose run -e 选项传递环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53069413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com