Ik zit me suf te zoeken waarom het volgende niet werkt. Ik heb een aantal dockerfiles gebaseerd op architectuur die ik aanroep middels docker build -f <filenaam> etc. En dan middels manifest push, maar ik wil graag 1 Dockerfile voor beide architecturen. Volgens de beschrijving op
https://www.docker.com/bl...nd-images-the-simple-way/ moet dat ook kunnen.
Maar met mijn stukje code
YAML:
1
2
| ARG ARCH=
FROM ${ARCH}debian:bullseye-slim |
gaat het al mis. Overigens zou er denk ik ${ARCH}/debian;bullseye-slim moeten staan zoals ook mijn afzonderlijke dockerfiles dat hebben.
Maar krijg bij deze de melding:
Bash:
1
2
3
4
5
6
| Dockerfile:2
--------------------
1 | ARG ARCH=
2 | >>> FROM ${ARCH}debian:bullseye-slim
ERROR: failed to solve: debian:bullseye-slim: no match for platform in manifest sha256:b46fc4e6813f6cbd9f3f6322c72ab974cc0e75a72ca02730a8861e98999875c7: not found |
terwijl ik netjes een docker pull van debian:bullseye-slim kan doen.
Verderop in de dockerfile komen dan ook een paar if-statements om op basis van architectuur een wget te doen. Dat gaat wel (deels) goed als ik bovenstaande niet ARG ARCH= zeg maar ARG ARCH-arm64v8. Maar dan is arm64v8 default en gaat ie ook verder zo gedragen en dat moet niet. Ik wil dus zowel een arm32v7 als arm64v8.
Het script wat de dockerfile aanroept:
Bash:
1
2
3
4
| #!/bin/bash
VANDAAG=$(date +"%Y%m%d")
docker buildx build --platform linux/arm64/v8,linux/arm32/v7 -f Dockerfile -t pluim003/influxdb-grafana-telegraf:${VANDAAG} --push . |
Wat zie ik over het hoofd?
Update: ik kom iets verder:
YAML:
1
2
| ARG TARGETOS
FROM ${TARGETARCH}${TARGETVARIANT}/debian:bullseye-slim |
Dat gaat toevallig cq gelukkig goed voor bijvoorbeeld arm32v7 maar voor arm64 weer niet omdat het image arm64v8/debian:bullseye-slim heet.
En een if-else werkt niet in dit stuk voor zover ik weet.
Update2:
Misschien hielp het om hier het al te deponeren ondanks dat er nog geen reactie was maar bleef nog verder speuren op het wereldwijde web. En dat nadat ik al veelvuldig had gezocht.
Maar kom nu inmiddels bijna tot het eind met de volgende Dockerfile:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| ARG TARGETOS
FROM arm64v8/debian:bullseye-slim as debian-arm64
FROM arm32v7/debian:bullseye-slim as debian-arm32
# Default versions
ENV INFLUXDB_VERSION=1.8.10
ENV TELEGRAF_VERSION=1.24.2
ENV GRAFANA_VERSION=9.2.1
ENV GF_DATABASE_TYPE=sqlite3
WORKDIR /root
# Clear previous sources
FROM debian-${TARGETARCH}
# Default versions
ENV INFLUXDB_VERSION=1.8.10
ENV TELEGRAF_VERSION=1.24.2
ENV GRAFANA_VERSION=9.2.1
RUN rm /var/lib/apt/lists/* -vf \
# Base dependencies
&& apt-get -y update \
&& apt-get -y install \
apt-transport-https \
apt-utils \
ca-certificates \
curl \
dialog \
git \
htop \
libfontconfig1 \
lsof \
nano \
procps \
vim \
net-tools \
wget \
gnupg \
supervisor
# Install InfluxDB
ARG TARGETARCH
ARG INFLUXDB_VERSION=${INFLUXDB_VERSION}
ARG ARCH=${TARGETARCH}
RUN if [ "${TARGETARCH}" = "arm32" ]; then ARCH="armhf"; fi && \
if [ "$[TARGETARCH]" = "arm64" ]; then ARCH="arm64"; fi && \
wget https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUXDB_VERSION}_${ARCH}.deb \
&& dpkg -i influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && rm influxdb_${INFLUXDB_VERSION}_${ARCH}.deb \
# Install Telegraf
&& wget https://dl.influxdata.com/telegraf/releases/telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz \
&& tar -xf telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz -C / && rm telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz \
&& cd /telegraf-${TELEGRAF_VERSION} && cp -R * / && cd / && rm -rf telegraf-${TELEGRAF_VERSION} \
&& groupadd -g 998 telegraf && useradd -ms /bin/bash -u 998 -g 998 telegraf \
# Install Grafana
&& apt-get install -y adduser libfontconfig1 \
&& wget https://dl.grafana.com/oss/release/grafana_${GRAFANA_VERSION}_${ARCH}.deb \
&& dpkg -i grafana_${GRAFANA_VERSION}_${ARCH}.deb && rm grafana_${GRAFANA_VERSION}_${ARCH}.deb \
# Cleanup
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
# Configure Supervisord
&& mkdir -p /var/log/supervisor
COPY supervisord/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Configure InfluxDB
COPY influxdb/influxdb.conf /etc/influxdb/influxdb.conf
COPY influxdb/init.sh /etc/init.d/influxdb
RUN chmod 0755 /etc/init.d/influxdb
# Configure Grafana
COPY grafana/grafana.ini /etc/grafana/grafana.ini
# Configure Telegraf
COPY telegraf/init.sh /etc/init.d/telegraf
RUN chmod 0755 /etc/init.d/telegraf
CMD [ "/usr/bin/supervisord" ] |
En wordt ook netjes gepusht naar hub.docker.com met nog 1 warning:
Bash:
1
2
| 1 warning found (use --debug to expand):
- Empty continuation line found in: RUN if [ "${TARGETARCH}" = "arm32" ]; then ARCH="armhf"; fi && if [ "$[TARGETARCH]" = "arm64" ]; then ARCH="arm64"; fi && wget https://dl.influxdata.com/influxdb/releases/influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && dpkg -i influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && rm influxdb_${INFLUXDB_VERSION}_${ARCH}.deb && wget https://dl.influxdata.com/telegraf/releases/telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz && tar -xf telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz -C / && rm telegraf-${TELEGRAF_VERSION}_linux_${ARCH}.tar.gz && cd /telegraf-${TELEGRAF_VERSION} && cp -R * / && cd / && rm -rf telegraf-${TELEGRAF_VERSION} && groupadd -g 998 telegraf && useradd -ms /bin/bash -u 998 -g 998 telegraf && apt-get install -y adduser libfontconfig1 && wget https://dl.grafana.com/oss/release/grafana_${GRAFANA_VERSION}_${ARCH}.deb && dpkg -i grafana_${GRAFANA_VERSION}_${ARCH}.deb && rm grafana_${GRAFANA_VERSION}_${ARCH}.deb && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && mkdir -p /var/log/supervisor |
Nu nog maar ff finetunen, want die ARG-definities wil buiten het influxdata-stukje hebben maar dat is meer cosmetisch.
Update3:
die optie om met --debug te draaien vat ik niet, want --debug wordt weer niet herkend als parameter bij het docker buildx build-commando. Die empty line waar ie over mekkert komt door de lege regels tussen de diverse installaties. In mijn oorspronkelijke afzonderlijke dockerfiles zijn dat ook 3 verschllende blokken. Nou ja, nu werkt het dus zoals ik wilde. Vraag dus beantwoord, maar laat het ter leringh ende vermaeck hier allemaal maar staan, want dit heeft me de nodige uren zoekwerk gekost. Misschien heeft iemand anders er nog iets aan.
Update4:
Had toch nog een aanpassing nodig, want op mijn Pi2 (32bit) kon ik niet de image pullen. Als platform had ik in het shellscript linux/arm/v7 nodig ipv linux/arm32/v7 en dat resulteerde weer in een aanpassing van de Dockerfile, want nu werd het niet debian-arm32 maar debian-arm.
Zo werd het weer een leerzame dag. :-)
[
Voor 68% gewijzigd door
DikkieDick op 21-10-2022 15:26
]