Skip to content

Commit 3a047b2

Browse files
authored
SYS-668 replace ISC dhcpd with kea (#248)
1 parent 4a48ebd commit 3a047b2

15 files changed

Lines changed: 274 additions & 218 deletions

images/dhcpd-dns-pxe/Dockerfile

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
1-
FROM alpine:3.20
2-
MAINTAINER Rich Braun "docker@instantlinux.net"
1+
FROM alpine:3.23
32
ARG BUILD_DATE
43
ARG VCS_REF
5-
LABEL org.label-schema.build-date=$BUILD_DATE \
4+
LABEL org.opencontainers.image.authors="Rich Braun docker@instantlinux.net" \
5+
org.label-schema.build-date=$BUILD_DATE \
66
org.label-schema.license=Apache-2.0 \
77
org.label-schema.name=dhcpd-dns-pxe \
88
org.label-schema.vcs-ref=$VCS_REF \
99
org.label-schema.vcs-url=https://github.com/instantlinux/docker-tools
10-
ARG DHCP_VERSION=4.4.3_p1-r4
11-
ARG DNSMASQ_VERSION=2.90-r3
10+
ARG KEA_VERSION=3.0.2-r0
11+
ARG DNSMASQ_VERSION=2.91-r0
1212

13-
ENV DHCP_BOOT=pxelinux.0 \
13+
ENV DB_HOST=db00 \
14+
DB_NAME=kea \
15+
DB_USER=kea \
16+
DB_SECRETNAME=kea-db-password \
17+
DB_INITIALIZE=yes \
18+
DHCP_BOOT=pxelinux.0 \
1419
DHCP_ENABLE=yes \
15-
DHCP_LEASE_PATH=/var/lib/misc \
1620
DHCP_LEASE_TIME=3600 \
1721
DHCP_NETBIOS_NAME_SERVERS="" \
18-
DHCP_RANGE="" \
1922
DHCP_SUBNET1=192.168.1.0 \
23+
DHCP_SUBNET1_POOL="" \
2024
DNS_ENABLE=yes \
2125
DNS_SERVER="" \
2226
DNS_UPSTREAM=8.8.8.8 \
@@ -34,11 +38,12 @@ ENV DHCP_BOOT=pxelinux.0 \
3438
TFTP_SERVER=self \
3539
TZ=UTC
3640

37-
RUN apk add --no-cache --update dhcp=$DHCP_VERSION dnsmasq=$DNSMASQ_VERSION && \
38-
mkdir -m 755 /run/dhcp && chown dhcp /run/dhcp
41+
RUN apk add --no-cache --update kea=$KEA_VERSION dnsmasq=$DNSMASQ_VERSION \
42+
kea-admin kea-hook-mysql mariadb-client && \
43+
mkdir -m 755 /run/kea && chown kea /run/kea
3944

40-
EXPOSE 53/udp 67/udp 69/udp
41-
VOLUME $DHCP_LEASE_PATH $TFTP_ROOT /etc/dhcpd.d/local /etc/dnsmasq.d/local
45+
EXPOSE 53/udp 67/udp 69/udp 8000/tcp
46+
VOLUME $TFTP_ROOT /etc/dhcpd.d/local /etc/dnsmasq.d/local
4247
COPY entrypoint.sh /usr/local/bin/
4348
COPY src/*.j2 /root/
4449
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]

images/dhcpd-dns-pxe/README.md

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
11
## dhcpd-dns-pxe
22
[![](https://img.shields.io/docker/v/instantlinux/dhcpd-dns-pxe?sort=date)](https://hub.docker.com/r/instantlinux/dhcpd-dns-pxe/tags "Version badge") [![](https://img.shields.io/docker/image-size/instantlinux/dhcpd-dns-pxe?sort=date)](https://github.com/instantlinux/docker-tools/tree/main/images/dhcpd-dns-pxe "Image badge") ![](https://img.shields.io/badge/platform-amd64%20arm64%20arm%2Fv6%20arm%2Fv7-blue "Platform badge") [![](https://img.shields.io/badge/dockerfile-latest-blue)](https://gitlab.com/instantlinux/docker-tools/-/blob/main/images/dhcpd-dns-pxe/Dockerfile "dockerfile")
33

4-
Serve DNS and DHCP from one or more small Alpine Linux container(s). This
5-
supplies DNS and tftp (for network PXE booting) using dnsmasq, and
6-
DHCP using your choice of the original ISC dhcpd or the newer
7-
dnsmasq. Any of the three services can be enabled or disabled.
4+
Serve DNS and DHCP from one or more small Alpine Linux container(s). This supplies DNS and tftp (for network PXE booting) using dnsmasq, and DHCP using your choice of kea or dnsmasq. Any of the three services can be enabled or disabled. ISC dhcpd is deprecated by its maintainers, and replaced here with kea in January 2026 starting with tag `3.0.2-r0-2.91-r0`. Look at the subnet and reservation definitions for breaking changes.
85

96
### Usage
107

118
In kubernetes.yaml / docker-compose.yml, set the environment variables for your environment.
129

1310
Mount these under /etc:
1411

15-
* /etc/dhcpd.d/local/reserve-<net>.conf: Add any hardware MAC addresses for which you want static IP assignments (see [dhcpd man page](https://linux.die.net/man/5/dhcpd.conf))
16-
* /etc/dhcpd.d/local/ranges: Optional non-overlapping range definitions as noted below
12+
* /etc/kea.d/local/reserve-<net>.conf: Add any hardware MAC addresses for which you want static IP assignments (see [dhcpd man page](https://linux.die.net/man/5/dhcpd.conf))
1713
* /etc/dnsmasq.d/local/hosts: Add entries you want added dnsmasq's DNS service (see [syntax](https://linux.die.net/man/5/hosts))
1814

19-
Mount your PXE boot images and client definitions under /tftpboot/pxelinux.
15+
Mount your PXE boot images and client definitions under /tftpboot/pxelinux. Kea stores reservations on a mariadb/mysql database: generate a secret for database access, and create an empty database `kea` with a user `kea`@`%`:
16+
```
17+
CREATE DATABASE kea;
18+
GRANT USAGE ON *.* TO `kea`@`%` IDENTIFIED BY '<password>';
19+
GRANT ALL PRIVILEGES ON `kea`.* TO `kea`@`%`;
20+
```
2021

21-
See the kubernetes.yaml provided here. If you're using Swarm, see the docker-compose.yml file provided here in the source directory; this needs to run on host network with kernel capability CAP_NET_ADMIN, so it will not currently run in Docker Swarm. (You can run a single instance of this via _docker run_ or _docker-compose_.) This repo has complete instructions for
22+
See the kubernetes.yaml provided here. If you're using Swarm, see the docker-compose.yml file provided here in the source directory. This repo has complete instructions for
2223
[building a kubernetes cluster](https://github.com/instantlinux/docker-tools/blob/main/k8s/README.md) where you can launch with [helm](https://github.com/instantlinux/docker-tools/tree/main/images/dhcpd-dns-pxe/helm), or [kubernetes.yaml](https://github.com/instantlinux/docker-tools/blob/main/images/dhcpd-dns-pxe/kubernetes.yaml) using _make_ and customizing [Makefile.vars](https://github.com/instantlinux/docker-tools/blob/main/k8s/Makefile.vars) after cloning this repo:
2324
~~~
2425
git clone https://github.com/instantlinux/docker-tools.git
2526
cd docker-tools/k8s
2627
make dhcpd-dns-pxe
2728
~~~
2829

29-
You can build a failsafe cluster of DHCP servers under kubernetes using the kubernetes.yaml definition here. Define a ConfigMap with non-overlapping range definitions such as "192.168.1.32 192.168.1.63", "192.16.1.64 192.168.1.95", "192.168.1.96 192.168.1.127" for a set of 3 replicas. If a replica goes down, the others will continue to assign addresses. They won't conflict thanks to the way DHCP protocol works; a client will use the first address offered and ignore any additional offers from the server pool. If a blank range is specified, the dhcp server will offer only reserved MAC/IP assignments.
30+
You can build a failsafe cluster of DHCP servers under kubernetes using the helm chart included here. Define a ConfigMap with your reservations defined as shown in kea documentation, and hosts defined as in the dnsmasq documentation. If a replica goes down, the others will continue to assign addresses. They won't conflict thanks to the way DHCP protocol works; a client will use the first address offered and ignore any additional offers from the server pool. Subsequent requests will be checked against the reservations database.
3031

3132
Verified to work with a single subnet and with the limited set of DHCP/DNS options supported in environment vars defined here. Additional options as defined in the [dnsmasq man page](https://linux.die.net/man/8/dnsmasq) can be specified as any .conf file under /etc/dnsmasq.d/local volume mount, and for dhcpd as any .conf file under /etc/dhcpd.d/local.
3233

3334
I don't use the DHCP feature of dnsmasq; its software configuration
34-
is hugely different from ISC and much more difficult to customize if
35+
is hugely different from ISC/kea and much more difficult to customize if
3536
you've been using ISC all along. If you've been using dnsmasq all
3637
along, simply set variable DHCP_ENABLE=no and volume-mount your configuration as /etc/dnsmasq.d/local/dhcpd-options.conf; dnsmasq will serve
3738
DHCP on port 67 if you have any such options specified.
@@ -42,18 +43,24 @@ These variables can be passed to the image from kubernetes.yaml or docker-compos
4243

4344
Variable | Default | Description |
4445
-------- | ------- | ----------- |
46+
DB_HOST | db00 | database host for kea
47+
DB_INITIALIZE | yes | set to no after initial setup
48+
DB_NAME | kea | db schema
49+
DB_SECRETNAME | kea-db-password | name of k8s secret
50+
DB_USER | kea | db username
4551
DHCP_BOOT | pxelinux.0 | PXE-boot filename
4652
DHCP_ENABLE | yes | enable dhcp server
4753
DHCP_LEASE_PATH | /var/lib/misc | don't change this
4854
DHCP_LEASE_TIME | 3600 | default lease time
4955
DHCP_NETBIOS_NAME_SERVERS | | netBIOS name servers
50-
DHCP_RANGE | | dynamic IP pool, e.g. "192.168.1.101 192.168.1.150"
56+
DHCP_SUBNET1 | 192.168.1.0/24 | subnet
57+
DHCP_SUBNET1_POOL | | dynamic IP pool, e.g. "192.168.1.101 - 192.168.1.150"
5158
DNS_ENABLE | yes | enable dns server
5259
DNS_SERVER | | list of (other) DNS servers to send dhcp clients
5360
DNS_UPSTREAM | 8.8.8.8 | upstream DNS server for queries (e.g. your ISP)
5461
DOMAIN | example.com | your domain name
5562
IP_FORWARDING | false | enable clients' IP forwarding
56-
LISTEN_ADDRESS | | bind to IP address
63+
LISTEN_ADDRESS | | bind dnsmasq to IP address
5764
MAX_LEASE_TIME | 14400 | maximum lease time
5865
NTP_SERVER | 0.pool.ntp.org,1.pool.ntp.org |
5966
PORT_DNSMASQ_DNS | 53 | port number for DNS
@@ -63,6 +70,11 @@ SUBNET1_NETMASK | 255.255.255.0 | network mask
6370
TFTP_ENABLE | yes | enable tftp server
6471
TFTP_ROOT | /tftpboot/pxelinux | don't change this
6572

73+
### Secrets
74+
| Secret | Description |
75+
| ------ | ----------- |
76+
| kea-db-password | database password |
77+
6678
### Contributing
6779

6880
If you want to make improvements to this image, see [CONTRIBUTING](https://github.com/instantlinux/docker-tools/blob/main/CONTRIBUTING.md).

images/dhcpd-dns-pxe/docker-compose.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ services:
55
image: ${REGISTRY_URI:-instantlinux}/dhcpd-dns-pxe:latest
66
restart: always
77
environment:
8+
DB_HOST: ${DB_HOST:-db00}
89
DHCP_NETBIOS_NAME_SERVERS: ${DHCP_NETBIOS_NAME_SERVERS}
9-
DHCP_RANGE: ${DHCP_RANGE}
10-
DHCP_SUBNET1: ${DHCP_SUBNET1:-192.168.1.0}
10+
DHCP_SUBNET1: ${DHCP_SUBNET1:-192.168.1.0/24}
11+
DHCP_SUBNET1_POOL: ${DHCP_SUBNET1_POOL}
1112
DOMAIN: ${DOMAIN:-example.com}
1213
DNS_SERVER: ${DNS_SERVERS:-8.8.8.8}
1314
DNS_UPSTREAM: ${DNS_UPSTREAM:-8.8.8.8}
@@ -20,14 +21,13 @@ services:
2021
- ${PORT_DNSMASQ_DNS:-53}:53/udp
2122
- 67:67/udp
2223
- 69:69/udp
24+
- 8000:8000/tcp
2325
volumes:
2426
- ${SHARE_PATH}/dhcpd-dns-pxe/pxelinux:/tftpboot/pxelinux:ro
25-
- ${ADMIN_PATH}/dhcpd-dns-pxe/etc/dhcpd.d:/etc/dhcpd.d/local:ro
27+
- ${ADMIN_PATH}/dhcpd-dns-pxe/etc/kea.d:/etc/dhcpd.d/local:ro
2628
- ${ADMIN_PATH}/dhcpd-dns-pxe/etc/dnsmasq.d:/etc/dnsmasq.d/local:ro
2729
- leases:/var/lib/misc
2830
network_mode: host
29-
cap_add:
30-
- NET_ADMIN
3131

3232
volumes:
3333
leases:

images/dhcpd-dns-pxe/entrypoint.sh

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
#! /bin/sh -e
22

33
# created 27 sep 2017 by richb
4-
# Populates dhcpd.conf and defaults in /etc/dhcpd.d & /etc/dnsmasq.d
5-
# Starts dhcpd (optionally) and dnsmasq
4+
# Populates kea.conf and defaults in /etc/kea.d & /etc/dnsmasq.d
5+
# Starts kea dhcpd (optionally) and dnsmasq
66

7-
DHCP_USER=dhcp
7+
DHCP_USER=kea
88

99
if [ "$DHCP_ENABLE" == yes ]; then
1010
if [ ! -z "$NETBIOS_NAME_SERVERS" ]; then
11-
NETBIOS_OPTION="option netbios-name-servers $DHCP_NETBIOS_NAME_SERVERS;"
11+
NETBIOS_OPTION="{\"space\": \"dhcp4\", \"name\": \"netbios-name-servers\", \"code\": 44, \"data\": \"$DHCP_NETBIOS_NAME_SERVERS\"},"
1212
fi
13-
if [ ! -z "$DHCP_RANGE" ]; then
14-
RANGE_OPTION="range $DHCP_RANGE;"
15-
elif [ "$(ls -A /etc/dhcpd.d/ranges)" ]; then
16-
RANGE=$(cat /etc/dhcpd.d/ranges/$POD_NAME)
17-
[ -z "$RANGE" ] || RANGE_OPTION="range $RANGE;"
13+
if [ ! -z "$DHCP_SUBNET1_POOL" ]; then
14+
POOL_OPTION="\"pools\": [{\"pool\": \"$DHCP_SUBNET1_POOL\"}],"
1815
fi
1916
if [ "$TFTP_SERVER" == self ]; then
2017
TFTP_SERVER=$(ifconfig $SUBNET1_INTERFACE | grep 'inet addr:' | cut -d: -f2 | awk '{print $1}')
2118
fi
22-
for file in /etc/dhcpd.conf /etc/dhcpd.d/default.conf /etc/dhcpd.d/subnet.conf /etc/dhcpd.d/apc-rpdu.conf; do
19+
[ -d /etc/kea.d ] || mkdir -m 750 /etc/kea.d
20+
chgrp kea /etc/kea.d
21+
for file in /etc/kea/kea.conf /etc/kea.d/local.conf /etc/kea.d/subnet.conf /etc/kea.d/apc-rpdu.conf; do
2322
if [ ! -e $file ]; then
24-
sed -e "s:{{ DHCP_BOOT }}:$DHCP_BOOT:" \
23+
sed -e "s:{{ DB_HOST }}:$DB_HOST:" \
24+
-e "s:{{ DB_NAME }}:$DB_NAME:" \
25+
-e "s:{{ DB_USER }}:$DB_USER:" \
26+
-e "s:{{ DHCP_BOOT }}:$DHCP_BOOT:" \
2527
-e "s:{{ DHCP_LEASE_TIME }}:$DHCP_LEASE_TIME:" \
2628
-e "s:{{ DHCP_NETBIOS_NAME_SERVERS }}:$DHCP_NETBIOS_NAME_SERVERS:" \
2729
-e "s:{{ DHCP_RANGE }}:$DHCP_RANGE:" \
@@ -31,29 +33,31 @@ if [ "$DHCP_ENABLE" == yes ]; then
3133
-e "s:{{ DOMAIN }}:$DOMAIN:" \
3234
-e "s:{{ IP_FORWARDING }}:$IP_FORWARDING:" \
3335
-e "s:{{ MAX_LEASE_TIME }}:$MAX_LEASE_TIME:" \
34-
-e "s:{{ NETBIOS_OPTION }}:$NETBIOS_OPTION:" \
36+
-e "s+{{ NETBIOS_OPTION }}+$NETBIOS_OPTION+" \
3537
-e "s:{{ NTP_SERVER }}:$NTP_SERVER:" \
36-
-e "s:{{ RANGE_OPTION }}:$RANGE_OPTION:" \
38+
-e "s+{{ POOL_OPTION }}+$POOL_OPTION+" \
3739
-e "s:{{ SUBNET1_GATEWAY }}:$SUBNET1_GATEWAY:" \
40+
-e "s:{{ SUBNET1_INTERFACE }}:$SUBNET1_INTERFACE:" \
3841
-e "s:{{ SUBNET1_NETMASK }}:$SUBNET1_NETMASK:" \
3942
-e "s:{{ TFTP_ENABLE }}:$TFTP_ENABLE:" \
4043
-e "s:{{ TFTP_SERVER }}:$TFTP_SERVER:" \
4144
-e "s:{{ TZ }}:$TZ:" \
4245
/root/$(basename $file).j2 > $file
4346
fi
4447
done
45-
for file in /etc/dhcpd.d/*.conf /etc/dhcpd.d/local/*.conf; do
46-
if ! grep -q "$file" /etc/dhcpd.conf; then
47-
echo "include \"$file\";" >>/etc/dhcpd.conf
48+
if [ ! -e /run/secrets/$DB_SECRETNAME ]; then
49+
echo kea-db-password secret is not set, proceeding without database
50+
else
51+
DB_PASS=`cat /run/secrets/$DB_SECRETNAME`
52+
sed -i -e "s:{{ DB_PASS }}:$DB_PASS:" /etc/kea/kea.conf
53+
if [ "$DB_INITIALIZE" == yes ]; then
54+
SCHEMA_EXISTS=$(mariadb -s -N -h $DB_HOST -D $DB_NAME -u $DB_USER \
55+
-p"$DB_PASS" -e "SHOW TABLES LIKE 'schema_version';")
56+
[ -z "$SCHEMA_EXISTS" ] && kea-admin db-init mysql -h $DB_HOST \
57+
-n $DB_NAME -u $DB_USER -p "$DB_PASS"
4858
fi
49-
done
50-
if [ ! -z "$LISTEN_ADDRESS" ]; then
51-
LISTEN_FLAG="-s $LISTEN_ADDRESS"
5259
fi
53-
touch $DHCP_LEASE_PATH/dhcpd.leases
54-
chown $DHCP_USER $DHCP_LEASE_PATH/dhcpd.leases
55-
dhcpd -d -cf /etc/dhcpd.conf -lf $DHCP_LEASE_PATH/dhcpd.leases \
56-
-user $DHCP_USER -group daemon $LISTEN_FLAG $SUBNET1_INTERFACE &
60+
kea-dhcp4 -c /etc/kea/kea.conf &
5761
fi
5862

5963
if [ "$TFTP_ENABLE" == yes ]; then

images/dhcpd-dns-pxe/helm/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ sources:
77
- https://source.isc.org/git/dhcp.git
88
- http://thekelleys.org.uk/gitweb/?p=dnsmasq.git
99
type: application
10-
version: 0.1.12
11-
appVersion: "4.4.3_p1-r4-2.90-r3"
10+
version: 0.2.1
11+
appVersion: "3.0.2-r0-2.91-r0"
1212
dependencies:
1313
- name: chartlib
1414
version: 0.1.8

images/dhcpd-dns-pxe/helm/values.yaml

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Default values for dhcpd-dns-pxe.
2-
dhcpPoolRanges:
3-
dhcpd-dns-pxe-0: 192.168.1.8 192.168.1.15
4-
dhcpd-dns-pxe-1: 192.168.1.16 192.168.1.31
5-
dhcpd-dns-pxe-2: ""
6-
7-
statefulset:
2+
deployment:
83
env:
4+
db_initialize: yes
5+
db_host: db00
6+
db_name: kea
7+
db_user: kea
98
dhcp_netbios_name_servers: 192.168.1.50,192.168.1.60
109
dhcp_subnet1: 192.168.1.0
10+
dhcp_subnet1_pool: 192.168.1.8 - 192.168.1.31
1111
domain: example.com
1212
dns_server: 192.168.1.40,192.168.1.45
1313
dns_upstream: 8.8.8.8
@@ -22,10 +22,15 @@ statefulset:
2222
fieldRef:
2323
fieldPath: metadata.name
2424
hostNetwork: true
25-
securityContext:
26-
capabilities:
27-
add: [ NET_ADMIN ]
28-
replicas: 3
25+
containerPorts:
26+
- containerPort: 67
27+
protocol: UDP
28+
- containerPort: 68
29+
protocol: UDP
30+
- containerPort: 8000
31+
nodeSelector:
32+
service.dhcpd-dns-pxe: allow
33+
replicas: 2
2934
affinity:
3035
podAntiAffinity:
3136
requiredDuringSchedulingIgnoredDuringExecution:
@@ -40,33 +45,24 @@ volumeMounts:
4045
name: share
4146
readOnly: true
4247
subPath: dhcpd-dns-pxe/pxelinux
43-
- mountPath: /etc/dhcpd.d/ranges
44-
name: ranges
45-
- mountPath: /etc/dhcpd.d/local/reservations.conf
48+
- mountPath: /etc/kea.d/local/reservations.conf
4649
name: config
4750
subPath: reservations
4851
- mountPath: /etc/dnsmasq.d/local/hosts
4952
name: config
5053
subPath: hosts
51-
- mountPath: /var/lib/misc
52-
name: leases
54+
- mountPath: /run/secrets/kea-db-password
55+
name: kea-db-password
56+
subPath: kea-db-password
5357
volumes:
5458
- name: config
5559
configMap:
5660
name: dhcpd-dns-pxe
57-
- name: ranges
58-
configMap:
59-
name: dhcpd-dns-pxe-ranges
61+
- name: kea-db-password
62+
secret:
63+
secretName: kea-db-password
6064
- name: share
6165
hostPath: { path: /var/lib/docker/k8s-volumes/share }
62-
volumeClaimTemplates:
63-
- metadata:
64-
name: leases
65-
spec:
66-
accessModes: [ ReadWriteOnce ]
67-
resources:
68-
requests:
69-
storage: 500Mi
7066

7167
image:
7268
repository: instantlinux/dhcpd-dns-pxe
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#!/bin/sh
2-
VER1=$(grep "ARG DHCP_VERSION" Dockerfile | cut -d= -f 2)
2+
VER1=$(grep "ARG KEA_VERSION" Dockerfile | cut -d= -f 2)
33
VER2=$(grep "ARG DNSMASQ_VERSION" Dockerfile | cut -d= -f 2)
44
echo "--tag $DOCKER_REPO:$VER1-$VER2"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
VER1=$(grep "ARG DHCP_VERSION" Dockerfile | cut -d= -f 2)
2+
VER1=$(grep "ARG KEA_VERSION" Dockerfile | cut -d= -f 2)
33
VER2=$(grep "ARG DNSMASQ_VERSION" Dockerfile | cut -d= -f 2)
44
docker tag $IMAGE_NAME $DOCKER_REPO:$VER1-$VER2
55
docker push $DOCKER_REPO:$VER1-$VER2

0 commit comments

Comments
 (0)