如何在 docker 中传递参数?

Docker 1.9允许向 dockerfile 传递参数。 参见链接: https://docs.docker.com/engine/reference/builder/#arg

如何在 docker-compose. yml 中传递相同的参数?
如果可能的话,也请提供一个例子。

159298 次浏览

This feature was added in Compose file format 1.6.

Reference: https://docs.docker.com/compose/compose-file/#args

services:
web:
build:
context: .
args:
FOO: foo

Now docker-compose supports variable substitution.

Compose uses the variable values from the shell environment in which docker-compose is run. For example, suppose the shell contains POSTGRES_VERSION=9.3 and you supply this configuration in your docker-compose.yml file:

db:
image: "postgres:${POSTGRES_VERSION}"

When you run docker-compose up with this configuration, Compose looks for the POSTGRES_VERSION environment variable in the shell and substitutes its value in. For this example, Compose resolves the image to postgres:9.3 before running the configuration.

This can now be done as of docker-compose v2+ as part of the build object;

docker-compose.yml

version: '2'
services:
my_image_name:
build:
context: . #current dir as build context
args:
var1: 1
var2: c

See the docker compose docs.

In the above example "var1" and "var2" will be sent to the build environment.

Note: any env variables (specified by using the environment block) which have the same name as args variable(s) will override that variable.

Something to add to these answers that the args are picked up only when using docker-compose up --build and not when using docker-compose build. If you want to build and run in separate steps, you need use docker-compose build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}or docker build --build-arg YOUR_ENV_VAR=${YOUR_ENV_VAR}

  1. Create a variable environment on Linux shell:

    export TAG=0.1.2
    
  2. Set variable inside docker-compose.yml

    db:
    image: "redis:${TAG}"
    
  3. Verify if value was replaced

    docker-compose config