Docker: nie można wykonać RUN mkdir w pliku Dockerfile

116

Oto komunikat o błędzie, który otrzymuję podczas tworzenia obrazu platformy Docker:

Krok 18: URUCHOM mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> Uruchomiony w 7b5854406120 mkdir: nie można utworzyć katalogu '/ var / www / app': Nie ma takiego pliku ani katalogu

Oto fragment pliku Dockerfile, który powoduje błąd:

FROM ubuntu:14.04
RUN groupadd -r luqo33 && useradd -r -g luqo33 luqo33

<installing nginx, fpm, php and a couple of other things>

RUN mkdir /var/www/app && chown luqo33:www-data /var/www/app
VOLUME /var/www/app
WORKDIR /var/www/app

„mkdir: nie można utworzyć katalogu '/ var / www / app': brak takiego pliku lub katalogu” brzmi tak nonsensownie - oczywiście nie ma takiego katalogu. Chcę to stworzyć. Co tu jest nie tak?

luqo33
źródło
4
Nie ma tu nic specyficznego dla Dockera, przy okazji - miałbyś ten sam problem z działaniem mkdir /var/www/appw systemie, który nie miałby /var/wwwbez niego.
Charles Duffy

Odpowiedzi:

178

Problem polega na tym, że /var/wwwto też nie istnieje i mkdirnie jest domyślnie rekurencyjne - oczekuje, że istnieje bezpośredni katalog nadrzędny.

Posługiwać się:

mkdir -p /var/www/app

... lub zainstaluj pakiet, który tworzy /var/wwwprzed osiągnięciem tego punktu w pliku Dockerfile.

Charles Duffy
źródło
Dziękuję za zwrócenie uwagi. Swoją drogą, jaki pakiet masz na myśli, że utworzyłby /var/www?
luqo33
To jest pytanie o opakowanie Ubuntu 14.04; Nie jestem tam ekspertem.
Charles Duffy
60

Podczas tworzenia podkatalogów zwisających z nieistniejących katalogów nadrzędnych należy przekazać -pflagę do mkdir... Zaktualizuj plik Dockerfile za pomocą

RUN mkdir -p ... 

Przetestowałem to i jest poprawne.

Kostikas
źródło
17

Możesz też po prostu użyć

WORKDIR /var/www/app

Automatycznie utworzy foldery, jeśli nie istnieją.

Następnie wróć do katalogu, w którym chcesz się znajdować.

Helzgate
źródło
-1

Oprócz poprzednich przypadków użycia, możesz również użyć Docker Compose do tworzenia katalogów na wypadek, gdybyś chciał utworzyć nowe fałszywe foldery na docker-compose up:

    volumes:
  - .:/ftp/
  - /ftp/node_modules
  - /ftp/files
Jasmeet Singh Chhabra
źródło
O co chodzi z tą odpowiedzią? Helzgate również się spóźnił.
Peter Mortensen