นักเทียบท่า: ไม่สามารถเรียกใช้งาน RUN mkdir ใน Dockerfile ได้


116

นี่เป็นข้อความแสดงข้อผิดพลาดที่ฉันได้รับเมื่อสร้างอิมเมจ Docker:

ขั้นตอนที่ 18: เรียกใช้ mkdir / var / www / app && chown luqo33: www-data / var / www / app ---> ทำงานใน 7b5854406120 mkdir: ไม่สามารถสร้างไดเร็กทอรี '/ var / www / app': ไม่มีไฟล์หรือไดเร็กทอรีดังกล่าว

นี่เป็นส่วนหนึ่งของ Dockerfile ที่ทำให้เกิดข้อผิดพลาด:

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: ไม่สามารถสร้างไดเร็กทอรี '/ var / www / app': ไม่มีไฟล์หรือไดเร็กทอรี" ฟังดูไร้สาระ - แน่นอนว่าไม่มีไดเร็กทอรีดังกล่าว ฉันต้องการสร้างมันขึ้นมา มีอะไรผิดปกติที่นี่?


4
ไม่มีอะไรเฉพาะนักเทียบท่าที่นี่ btw - คุณมีปัญหาเดียวกันกับการทำงานmkdir /var/www/appบนระบบที่/var/wwwไม่มีมัน
Charles Duffy

คำตอบ:


178

ปัญหาคือ/var/wwwไม่มีอยู่จริงและmkdirไม่มีการเรียกซ้ำตามค่าเริ่มต้น - คาดว่าจะมีไดเร็กทอรีหลักในทันที

ใช้:

mkdir -p /var/www/app

... หรือติดตั้งแพ็คเกจที่สร้างขึ้น/var/wwwก่อนที่จะมาถึงจุดนี้ใน Dockerfile ของคุณ


ขอบคุณที่ชี้ให้เห็น คุณหมายถึงว่าจะสร้างแพ็คเกจ/var/wwwอะไร
luqo33

นั่นเป็นคำถามเกี่ยวกับแพ็คเกจ Ubuntu 14.04 ฉันไม่ใช่ผู้เชี่ยวชาญที่นั่น
Charles Duffy

60

เมื่อสร้างไดเร็กทอรีย่อยที่ห้อยลงมาจากไดเร็กทอรีหลักที่ไม่มีอยู่คุณต้องส่ง-pแฟmkdirล็กไปที่... โปรดอัปเดต Dockerfile ของคุณด้วย

RUN mkdir -p ... 

ฉันทดสอบแล้วและถูกต้อง


17

คุณยังสามารถใช้ไฟล์

WORKDIR /var/www/app

มันจะสร้างโฟลเดอร์โดยอัตโนมัติหากไม่มีอยู่

จากนั้นเปลี่ยนกลับไปที่ไดเร็กทอรีที่คุณต้องการ


-1

นอกเหนือจากกรณีการใช้งานก่อนหน้านี้คุณยังสามารถใช้Docker Composeเพื่อสร้างไดเร็กทอรีในกรณีที่คุณต้องการสร้างโฟลเดอร์จำลองใหม่บนdocker-compose up:

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

มีสาระอะไรกับคำตอบนี้? เฮลซ์เกตก็มาช้าเช่นกัน
Peter Mortensen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.