将参数传递给docker撰写

dee*_*zen 30 docker docker-compose

在我的docker compose文件中有一个动态字段,我想在运行期间生成它.实际上它是一个字符串模板:

environment:
    - SERVER_URL:https://0.0.0.0:${PORT}
Run Code Online (Sandbox Code Playgroud)

我想PORT动态配置此参数

docker-compose run <service> PORT=443
Run Code Online (Sandbox Code Playgroud)

文档中ARGS参数集我想我可以使用.但是没有信息我如何在compose文件中使用它们

dzo*_*f31 27

在docker-compose中,参数可用且仅在其中有用dockerfile.您可以在下面的级别中指定您正在执行的操作,如下所示:

#dockerfile
ARG PORT
ENV SERVER_URL "https://0.0.0.0:$PORT"
Run Code Online (Sandbox Code Playgroud)

您的端口可以在docker-compose.yml中设置:

build:
  context: .
  args:
    - PORT=443
Run Code Online (Sandbox Code Playgroud)

在任何情况下,它实际上都是一个环境变量.如果适合您,您可以通过运行命令传递它:

PORT=443 docker-compose run <service>
#or
docker-compose run <service> -e PORT=443
Run Code Online (Sandbox Code Playgroud)

  • 这很糟糕,我希望能够下载一个预先构建的容器并使用我选择的任何运行时参数运行它.能够在docker-compose中列出它们应该是基本功能.我只是覆盖入口点. (15认同)
  • 这对我有用,而且我不必碰我的 Dockerfile。我使用 `PORT=443 docker-compose ... -f bla.yml` 传入端口,然后在我的 YAML 文件中,行 `command: bash -c "echo $PORT"` 成功显示 443。 (4认同)

小智 15

您可以在使用docker-compose build时使用该标志

docker-compose build --build-arg PRODUCTION=VALUE
Run Code Online (Sandbox Code Playgroud)

在Dockerfile中,您可以获取参数PRODUCTION

# Dockerfile
ARG PRODUCTION
FROM node:latest
Run Code Online (Sandbox Code Playgroud)


jos*_*ode 11

这可以通过docker stack 部署来实现

您的环境部分中的示例撰写文件:

- MY_VARIABLE_NAME=${MY_VARIABLE_VALUE}
Run Code Online (Sandbox Code Playgroud)

Stack Deploy 命令(我从 Windows 中的 Gitbash 运行此命令):

MY_VARIABLE_VALUE=some-value docker stack deploy --compose-file compose_file_here stackname
Run Code Online (Sandbox Code Playgroud)

参考请参阅此处的 Github 帖子

  • 值得注意的是,这也适用于“docker compose up” (2认同)
  • 所有这些答案都归结为环境变量。太糟糕了,无法将参数传递给“docker-compose up”,以便在“执行”docker compose 时扩展变量,但容器看不到该变量。例如,指定使用哪个版本的映像来启动特定服务的变量。 (2认同)

Lar*_*ars 7

看到这个答案。您可以这样做:PORT=433 docker-compose <command>

您甚至可以提供多个值: PORT=433 MYIP='192.168.123.456' docker-compose <command>


Luc*_*BAF 7

分享我使用最少的设置和命令更改使用 Docker Compose 设置运行时变量的唯一方法。

docker-compose.yml

services:
  my_service:
    ...
    environment:
      - MYENVVAR=placeholder_value
Run Code Online (Sandbox Code Playgroud)

在终端上:

docker-compose run -e MYENVVAR=actual_value my_service
Run Code Online (Sandbox Code Playgroud)

请注意,命令行参数的“-e”部分必须位于服务名称之前。

官方文档对此进行了描述:使用 docker compose run 设置环境变量


归档时间:

查看次数:

37808 次

最近记录:

6 年,9 月 前