如何在docker-compose中定义构建参数?

wwwo4jvm  于 2023-03-17  发布在  Docker
关注(0)|答案(5)|浏览(229)

我有下面的docker-compose文件

version: '3'
services:
    node1:
            build: node1
            image: node1
            container_name: node1

    node2:
            build: node2
            image: node2
            container_name: node2

我可以构建这两个映像,并使用单个命令启动它们
docker-compose up -d --build
但是我想在构建中使用build-args。在compose范围之外的图像的原始构建脚本看起来像这样

#!/bin/sh
docker build \
--build-arg ADMIN_USERNNAME_1=weblogic \
--build-arg ADMIN_PASSWORD_1=weblogic1 \
--build-arg ADMIN_NAME_1=admin \
--build-arg ...
--build-arg ... \
-t test/foo .

这两个映像将使用相同名称但不同值的构建参数。而且,由于有许多构建参数,将它们存储在特定于组合服务的构建属性文件中会很方便。这在docker-compose中可能吗?

xurqigkl

xurqigkl1#

您可以使用构建命令docker-compose定义args
停靠文件示例:

FROM nginx:1.13

RUN apt-get -y update && apt-get install -y \
    apache2-utils && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ARG username
ARG password

RUN htpasswd -bc /etc/nginx/.htpasswd $username $password

停靠器合成文件:

version: '3'
services:
  node1:
     build: ./dir

./dir包含Dockerfile,我使用以下命令进行构建:

docker-compose build --build-arg username="my-user" --build-arg password="my-pass"

我已经看到:

Step 5/5 : RUN htpasswd -bc /etc/nginx/.htpasswd $username $password
 ---> Running in 80735195e35d
Adding password for user my-user
 ---> c52c92556825

我把我的堆栈:

docker-compose up -d

现在我可以检查nginx容器内部,我的用户名和(加密的)密码在那里:

docker@default:~/test$ docker exec -it test_node1_1 bash
root@208e4d75e2bd:/# cat /etc/nginx/.htpasswd
my-user:$apr1$qg4I/5RO$KMaOPvjbnKdZH37z2WYfe1

使用此方法,您可以将build args传递到docker-compose堆栈。

r7s23pms

r7s23pms2#

Dockerfile中:

ARG CERTBOT_TAG=latest
FROM certbot/certbot:${CERTBOT_TAG}

docker-compose.yml文件中:

version: '3.4'
services:
  certbot:
    build:
      context: .
      args:
        CERTBOT_TAG: v0.40.1

您可以建立或增强您的服务:

docker-compose build certbot
z0qdvdin

z0qdvdin3#

正如Salek上面提到的,添加context: .会有所帮助。
例如:

version: '3.5'
services:
  app:
    build:
      context: .
      args:
        NODE_VERSION: 14.15.4

'

fiei3ece

fiei3ece4#

Docker文件

ARG ACCOUNT_ID

FROM $ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/my-composer:latest as composer
LABEL stage=intermediate

Buildspec或CLI执行以下命令。

docker-compose build --build-arg ACCOUNT_ID="23423432423" --no-cache

如果要在CLI中打印ACCOUNT_ID

ARG ACCOUNT_ID

FROM amazonlinux:latest
RUN yum -y install aws-cli 
RUN echo $ACCOUNT_ID

FROM $ACCOUNT_ID.dkr.ecr.ap-southeast-1.amazonaws.com/my-composer:latest as composer
LABEL stage=intermediate

注意:ARG应该在所有FROM语句的顶部,然后它将作为全局ARG工作。

pwuypxnk

pwuypxnk5#

您可以直接在Docker-compose文件中指定参数:

node1:
    build:
        context: node1
        args:
            ADMIN_USERNNAME: weblogic1
            ADMIN_PASSWORD: weblogic1
            ADMIN_NAME: admin1
    image: node1
    container_name: node1

查看完整示例:MWE
官方文件里有所有细节。

相关问题