В Dockerfile не работает ARG для FROM
docker info:
Client: Docker Engine - Community
Version: 24.0.7
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.11.2
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.21.0
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 15
Running: 1
Paused: 0
Stopped: 14
Images: 339
Server Version: 24.0.7
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 3dd1e886e55dd695541fdcd67420c2888645a495
runc version: v1.1.10-0-g18a0cb0
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
Kernel Version: 5.4.0-132-generic
Operating System: Ubuntu 20.04.5 LTS
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.839GiB
Name: ubuntu-2004-clean-01
ID: e397e021-a07f-4d31-8542-a4a52e25c357
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
172.16.11.200:5000
cache.localdomain:5000
repo.localdomain:5000
127.0.0.0/8
Live Restore Enabled: false
Часть Dockerfile:
ARG DOCKER_REGISTRY_ADDRESS="cache.localdomain:5000"
ARG DISTRO=alpine
ARG DISTRO_VERSION=3.18
ARG DOCKER_NODEJS_IMAGE_NAME=${DOCKER_REGISTRY_ADDRESS}/node-${DISTRO}${DISTRO_VERSION}
FROM ${DOCKER_NODEJS_IMAGE_NAME} AS nodejs
Выполняю docker build . --tag image-custom и получаю:
ERROR: failed to solve: base name (${DOCKER_NODEJS_IMAGE_NAME}) should not be blank
В разных сетях планирую использовать разные адреса реестра докер-образов и разные имена самих докер образов. Поэтому пишу ARG, чтобы можно было делать docker build --build-arg.
Ответы (1 шт):
Нашёл проблему.
У меня слишком высоко был LABEL maintainer=${MAINTAINER}, которому уже нужен был какой-то образ, поэтому, в качестве временного решения в самое начало файла был добавлен FROM alpine. Т.е. более полно выглядело так:
ARG DOCKER_REGISTRY_ADDRESS="cache.localdomain:5000"
ARG DISTRO=alpine
ARG DISTRO_VERSION=3.18
FROM ${DISTRO}
ARG DOCKER_NODEJS_IMAGE_NAME=${DOCKER_REGISTRY_ADDRESS}/node-${DISTRO}${DISTRO_VERSION}
ARG MAINTAINER="don Rumata"
LABEL maintainer=${MAINTAINER}
FROM ${DOCKER_NODEJS_IMAGE_NAME} AS nodejs
Судя по всему, я нарушил порядок создания слоёв и поэтому всё крашилось. Вот правильный вариант:
ARG DOCKER_REGISTRY_ADDRESS="cache.localdomain:5000"
ARG DISTRO=alpine
ARG DISTRO_VERSION=3.18
ARG DOCKER_NODEJS_IMAGE_NAME=${DOCKER_REGISTRY_ADDRESS}/node-${DISTRO}${DISTRO_VERSION}
FROM ${DOCKER_NODEJS_IMAGE_NAME} AS nodejs
ARG MAINTAINER="don Rumata"
LABEL maintainer=${MAINTAINER}