Docker-Images: Sie können den zuvor installierten Befehl nicht finden?

Docker-Images: Sie können den zuvor installierten Befehl nicht finden?

Ich erstelle mehrere Docker-Images, kann aber scheinbar nicht auf bestimmte Befehle zugreifen, obwohl ich Images importiere, die diese Befehle enthalten. Beispiel:

# Dockerfile ubuntu-essentials
FROM ubuntu:14.04

RUN apt-get update
RUN apt-get -y install ssh rsync git graphviz gedit-plugins wget nano zlibc zlib1g-dev build-essential libncurses5-dev libncursesw5-dev libboost-dev gdebi software-properties-common unzip


# Dockerfile fastqc
FROM ubuntu:14.04
FROM rioualen/ubuntu-essentials:1.0

ENV SOURCE_DIR=~/app_sources/
ENV BIN_DIR=~/bin/

WORKDIR ${SOURCE_DIR}
RUN wget --no-clobber http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip
RUN unzip -o fastqc_v0.11.5.zip

Dies führt zu einem Fehler „Unzip nicht gefunden“, obwohl es im ersten Image installiert ist. Der Befehl wget funktioniert einwandfrei.

Wenn Sie die Installation von unzip in die zweite Docker-Datei einfügen, funktioniert es normal:

# Dockerfile fastqc
FROM ubuntu:14.04
FROM rioualen/ubuntu-essentials:1.0

ENV SOURCE_DIR=~/app_sources/
ENV BIN_DIR=~/bin/

RUN apt-get -y install unzip 

WORKDIR ${SOURCE_DIR}
RUN wget --no-clobber http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip
RUN unzip -o fastqc_v0.11.5.zip

Irgendeine Idee? Da ich neu bei Docker bin, weiß ich nicht, wonach ich suchen soll ... Danke.

Antwort1

Einige „FROMs“ funktionieren nicht wie erwartet. Verwenden Sie jedes FROM als Trennzeichen für ein neues Bild. Das bedeutet, dass Sie 3 verschiedene Bilder erstellen und das letzte wird sein:

    FROM rioualen/ubuntu-essentials:1.0

    ENV SOURCE_DIR=~/app_sources/
    ENV BIN_DIR=~/bin/

    WORKDIR ${SOURCE_DIR}
    RUN wget --no-clobber http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip
    RUN unzip -o fastqc_v0.11.5.zip

Wo Sie es noch nicht installiert haben, entpacken Sie es.

DerDokumentation dazuist etwas spärlich, aber ich denke, es erklärt es gut.

Ich würde vorschlagen, dass Sie jedes Bild, das Sie erstellen möchten, einzeln ablegen, Dockerfilewas bedeutet, dass jedes Bild nur ein „FROM“ enthält. Dadurch erhalten Sie eine viel bessere Transparenz über das, was vor sich geht.

verwandte Informationen