在docker中使用美元符号造成构建参数混淆



运行docker compose时,我想从操作系统(Ubuntu 21.10(传递我的用户id和组id。我这样做是为了在容器中创建一个与我当前登录的用户id匹配的用户。

当我(在php-apache容器中(指定构建参数时,如下所示:

version: '3.8'
services:
api_php-apache:
container_name: api_php-apache
build:
args:
USER_ID: ${(id -u)}
GROUP_ID: ${(id -g)}

我收到以下错误:

invalid interpolation format for services.api_php-apache.build.args.GROUP_ID: "${id -g}". You may need to escape any $ with another $.

但如果我这样指定:

version: '3.8'
services:
api_php-apache:
container_name: api_php-apache
build:
args:
USER_ID: ${UID}
GROUP_ID: ${GID}

并且我已经在CCD_ 4中导出了我的CCD_ 2和CCD_。

如何实现正确传递语法的id -u/id -g命令?

我的医生组合。YML

version: '3.8'
services:
api_php-database:
image: postgres
container_name: api_php-database
restart: unless-stopped
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: laravel_docker
volumes:
- ./postgres-data:/var/lib/postgresql/data
ports:
- '5432:5432'
api_php-apache:
container_name: api_php-apache
build:
context: ./php
args:
USER_ID: ${(id -u)}
GROUP_ID: ${(id -g)}
ports:
- '8080:80'
volumes:
- ./src:/var/www/laravel_docker
- ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
depends_on:
- api_php-database

您不能在compose.yaml中使用子shell。您需要在运行compose之前导出这些子shell,然后只引用变量或将其留空,这样compose就会拾取它。

api_php-apache:
container_name: api_php-apache
build:
context: ./php
args:
USER_ID: ${USER_ID:-1000}
GROUP_ID: ${GROUP_ID:-1000}
export USER_ID="$(id -u)"
export GROUP_ID="$(id -g)"
docker compose up --build

按照我在这里做的方式,如果没有在.env文件或当前shell中设置,它将回落到uid和gid 1000。

最新更新