Docker compose: This APT has Super Cow Powers ?!
-
Ich verstehe nicht, was hier falsch ist:
shellinabox: image: sspreitzer/shellinabox:latest volumes: - </path/to/host/dir/>:</path/to/guest/dir/> labels: - "traefik.enable=true" - <traefik configuration...> environment: - SIAB_PASSWORD=<...> - SIAB_SUDO=true - SIAB_SSL=false command: > /bin/bash -c "apt update && apt upgrade -y && apt install unrar -y"
Nach einem Aufruf von
docker compose up -d
bricht der Container mit folgender Fehlermeldung ab:<...> Executing: /bin/bash -c apt update && apt upgrade -y && apt install unrar -y apt 2.4.9 (amd64) Usage: apt [options] command apt is a commandline package manager and provides commands for searching and managing as well as querying information about packages. It provides the same functionality as the specialized APT tools, like apt-get and apt-cache, but enables options more suitable for interactive use by default. Most used commands: list - list packages based on package names search - search in package descriptions show - show package details install - install packages reinstall - reinstall packages remove - remove packages autoremove - Remove automatically all unused packages update - update list of available packages upgrade - upgrade the system by installing/upgrading packages full-upgrade - upgrade the system by removing/installing/upgrading packages edit-sources - edit the source information file satisfy - satisfy dependency strings See apt(8) for more information about the available commands. Configuration options and syntax is detailed in apt.conf(5). Information about how to configure sources can be found in sources.list(5). Package and version choices can be expressed via apt_preferences(5). Security details are available in apt-secure(8). This APT has Super Cow Powers.
Und ich verstehe nicht, was an dem command falsch wäre.
Wenn ich mich manuell in den Container "einwähle", mit
docker exec -ti <container name> bash
, dann kann ich ja auch "Sachen" mit "sudo apt" installieren, dafür brauche ich dann aber das oben angegebene Passwort.Habt ihr 'ne Idee?
-
Nach dieser Antwort , https://stackoverflow.com/a/71789000 , sollte es eigentlich möglich sein, im docker-compose.yml noch ein zusätzliches command aufzurufen, neben dem RUN, ENTRYPOINT und CMD aus dem Dockerfile ...
Das Dockerfile ist hier: https://github.com/sspreitzer/shellinabox-container-image/blob/main/ubuntu/Dockerfile
Na ja, aber "sollte" ist ja ein Konjunktiv ...
-
Die Reihenfolge im Dockerfile ist: RUN, CMD und ENTRYPOINT. Wenn ich nun im docker-compose.yml ein eigenes "command:" hinzufügen möchte, wird wahrscheinlich das CMD aus dem Dockerfile überschrieben ...
Ich glaube, ich hab nur zwei Möglichkeiten (https://linuxhandbook.com/modifying-docker-image/):
Entweder, das Dockerfile an sich verändern (auf das ich aber keinen Einfluss hab, da es ja von jemand anders ist),
oder mit "commit" ein modifiziertes Image committen (das dann aber auch nur vorübergehend persistent wäre).Vielleicht übersehe ich etwas, aber ich denke, dass meine Frage unlösbar ist ... Docker hat diesen Fall womöglich nicht vorgesehen ^^
-
Ach, ich hatte einfach zu kompliziert gedacht ... Der Trick ist, einfach ein eigenes Dockerfile anzulegen, mit einem Image von einem anderen Dockerfile ... (das also nicht direkt in die docker-compose.yml zu schreiben ...) Also:
eigenes Dockerfile:
FROM sspreitzer/shellinabox:latest ENV SIAB_PASSWORD=abc ENV SIAB_SUDO=true ENV SIAB_SSL=false RUN apt update && apt upgrade -y && apt install nano net-tools fzf mc unzip unrar -y
docker-compose.yml:
shellinabox: build: ./shellinabox-dockerfile volumes: - </path/to/host/dir/>:</path/to/guest/dir/> labels: - "traefik.enable=true" - <traefik configuration...>
(im Ordner
shellinabox-dockerfile
ist das Dockerfile)Das ist schon alles, dann einmal
docker compose up -d --no-deps --build shellinabox
aufrufen und er baut das Teil auf.Dann kann man die Website aufrufen: https://i.postimg.cc/9fr6N2NB/Screenshot-2023-07-07-213711.png
(Ja, ihr seht es richtig, das läuft alles in einem normalen Webbrowser ...)