Docker: Tidak dapat menjalankan RUN mkdir di Dockerfile

116

Ini adalah pesan kesalahan yang saya dapatkan saat membuat image Docker:

Langkah 18: JALANKAN mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> Berjalan di 7b5854406120 mkdir: tidak dapat membuat direktori '/ var / www / app': Tidak ada file atau direktori seperti itu

Ini adalah bagian dari Dockerfile yang menyebabkan kesalahan:

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: tidak dapat membuat direktori '/ var / www / app': Tidak ada file atau direktori" terdengar sangat tidak masuk akal - tentu saja tidak ada direktori seperti itu. Saya ingin membuatnya. Ada apa disini?

luqo33
sumber
4
Tidak ada yang khusus untuk Docker di sini, btw - Anda akan memiliki masalah yang sama berjalan mkdir /var/www/apppada sistem yang tidak memilikinya /var/www.
Charles Duffy

Jawaban:

178

Masalahnya adalah itu /var/wwwjuga tidak ada, dan mkdirtidak rekursif secara default - itu mengharapkan direktori induk langsung ada.

Menggunakan:

mkdir -p /var/www/app

... atau instal paket yang membuat /var/wwwsebelum mencapai titik ini di Dockerfile Anda.

Charles Duffy
sumber
Terima kasih telah menunjukkan hal ini. Omong-omong, paket apa yang Anda maksud yang akan dibuat /var/www?
luqo33
Itu pertanyaan tentang pengemasan Ubuntu 14.04; Saya bukan ahli di sana.
Charles Duffy
60

Saat membuat subdirektori menggantung dari direktori induk yang tidak ada, Anda harus meneruskan -pbendera ke mkdir... Harap perbarui Dockerfile Anda dengan

RUN mkdir -p ... 

Saya menguji ini dan itu benar.

Kostikas
sumber
17

Anda juga bisa langsung menggunakan

WORKDIR /var/www/app

Ini akan secara otomatis membuat folder jika tidak ada.

Kemudian beralih kembali ke direktori yang Anda inginkan.

Helzgate
sumber
-1

Terlepas dari kasus penggunaan sebelumnya, Anda juga dapat menggunakan Docker Compose untuk membuat direktori jika Anda ingin membuat folder tiruan baru di docker-compose up:

    volumes:
  - .:/ftp/
  - /ftp/node_modules
  - /ftp/files
Jasmeet Singh Chhabra
sumber
Ada apa dengan jawaban ini? Helzgate juga terlambat.
Peter Mortensen