Ich möchte einen Container mit einer Custom-Software drin betreiben. Für die Software gibt es immer wieder Updates, die recht umfangreiche Konfiguration, bestehend aus dutzenden von Dateien, bliebe davon aber zunächst unberührt. Also lag der Gedanke nahe einen Container zu bauen der nur die Software enthält und ein Volume welches die Konfiguration (persistent) enthält.
Soweit ich das recherchiert habe kann man auf die Daten in einem Volume nur dann zugreifen (z.B. mit docker cp ...) wenn dieses in einem Container gemounted ist, wobei der Container nicht laufen muss. Also habe ich sowas für das befüllen bzw. updaten der Konfig gemacht:
Dann wollte ich das Volume einfach in meiner docker-compose.yaml einbauen und nutzen:
Aber beim "docker-compose up -d" nutzt er das Volume nicht, sondern baut ein neues mit dem Namen der yaml, gefolgt vom Volume-Namen!
Weiterhin habe ich das Problem das ich beim Build ja die Variable APT_SERVICE_VERSION mitgeben muss. Wenn ich
mache, klappt der Build. Ein nachfolgendes "docker-compose up -d" jedoch versucht den Build nochmal zu machen (warum eigentlich?) und scheitert dann an der fehlenden Variablen. Das build-Kommando kennt auch keine build-arg Übergabe.
Soweit ich das recherchiert habe kann man auf die Daten in einem Volume nur dann zugreifen (z.B. mit docker cp ...) wenn dieses in einem Container gemounted ist, wobei der Container nicht laufen muss. Also habe ich sowas für das befüllen bzw. updaten der Konfig gemacht:
Code:
# create config volume (only needed once)
docker volume create my-config
# update configs into volume
docker container create --name temp -v my-config:/etc/service busybox
docker cp files/opt/service/configurations/ temp:/etc/service/
docker rm tmp
Dann wollte ich das Volume einfach in meiner docker-compose.yaml einbauen und nutzen:
YAML:
# Defines a CUE Zipline
version: "3"
volumes:
my-config:
services:
service:
build:
context: .
dockerfile: Dockerfile
args:
- APT_SERVUCE_VERSION
image: "service:${APT_SERVICE_VERSION:-latest}"
container_name: service
volumes:
- /var/log/service:/var/log/service
- my-config:/etc/service:ro
ports:
- "12791:12791"
Aber beim "docker-compose up -d" nutzt er das Volume nicht, sondern baut ein neues mit dem Namen der yaml, gefolgt vom Volume-Namen!
Weiterhin habe ich das Problem das ich beim Build ja die Variable APT_SERVICE_VERSION mitgeben muss. Wenn ich
Code:
docker-compose build ----build-arg APT_SERVICE_VERSION=1.1.10