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?


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.


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.


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.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.