Docker: Không thể thực thi RUN mkdir trong Dockerfile


116

Đây là thông báo lỗi tôi nhận được khi tạo hình ảnh Docker:

Bước 18: CHẠY mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> Đang chạy trong 7b5854406120 mkdir: không thể tạo thư mục '/ var / www / app': Không có tệp hoặc thư mục như vậy

Đây là một đoạn Dockerfile gây ra lỗi:

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: không thể tạo thư mục '/ var / www / app': Không có tệp hoặc thư mục nào như vậy" nghe có vẻ vô lý - tất nhiên là không có thư mục nào như vậy. Tôi muốn tạo ra nó. Có gì sai ở đây?


4
Không có Docker cụ thể ở đây, btw - bạn sẽ gặp vấn đề tương tự khi chạy mkdir /var/www/apptrên một hệ thống không có /var/wwwmà không có nó.
Charles Duffy

Câu trả lời:


178

Vấn đề là nó /var/wwwcũng không tồn tại và mkdirkhông phải là đệ quy theo mặc định - nó hy vọng thư mục mẹ ngay lập tức tồn tại.

Sử dụng:

mkdir -p /var/www/app

... hoặc cài đặt một gói tạo /var/wwwtrước khi đạt đến điểm này trong Dockerfile của bạn.


Cảm ơn vì đã chỉ ra điều này. Nhân tiện, bạn muốn nói gói nào sẽ tạo ra /var/www?
luqo33

Đó là một câu hỏi về cách đóng gói Ubuntu 14.04; Tôi không phải là một chuyên gia ở đó.
Charles Duffy

60

Khi tạo các thư mục con bị treo khỏi (các) thư mục mẹ không tồn tại, bạn phải chuyển -pcờ cho mkdir... Vui lòng cập nhật Dockerfile của bạn với

RUN mkdir -p ... 

Tôi đã thử nghiệm điều này và nó chính xác.


17

Bạn cũng có thể đơn giản sử dụng

WORKDIR /var/www/app

Nó sẽ tự động tạo các thư mục nếu chúng không tồn tại.

Sau đó chuyển trở lại thư mục mà bạn cần.


-1

Ngoài các trường hợp sử dụng trước đó, bạn cũng có thể sử dụng Docker Compose để tạo các thư mục trong trường hợp bạn muốn tạo các thư mục giả mới trên docker-compose up:

    volumes:
  - .:/ftp/
  - /ftp/node_modules
  - /ftp/files

Vấn đề với câu trả lời này là gì? Helzgate cũng đến muộn.
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.