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 ...)


Anmelden zum Antworten