คุณกำลังพยายามต่อเชื่อมไดเรกทอรีเข้ากับไฟล์ (หรือในทางกลับกัน)?


92

17.06.0-ceฉันมีนักเทียบท่ากับรุ่น เมื่อฉันพยายามติดตั้ง NGINX โดยใช้นักเทียบท่าพร้อมคำสั่ง:

docker run -p 80:80 -p 8080:8080 --name nginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx:latest

ก็แสดงว่า

นักเทียบท่า: การตอบสนองข้อผิดพลาดจาก daemon: oci ข้อผิดพลาดรันไทม์: container_linux.go: 262: การเริ่มต้นกระบวนการคอนเทนเนอร์ทำให้เกิด "process_linux.go: 339: container init ทำให้เกิด \" rootfs_linux.go: 57: installation \\ "/ appdata / nginx / conf / nginx.conf \\ "เพื่อ rootfs \\ "/ var / lib / นักเทียบท่า / aufs / mnt / dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 \\" ที่ \\" / var / lib / นักเทียบท่า / aufs / mnt / dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0 / etc / Nginx / nginx.conf \\ "ทำให้ \\" ไม่ใช่ไดเร็กทอรี \\ "\" ": คุณกำลังพยายามต่อเชื่อมไดเรกทอรีเข้ากับไฟล์ (หรือกลับกัน)? ตรวจสอบว่าเส้นทางโฮสต์ที่ระบุมีอยู่หรือไม่และเป็นประเภทที่คาดไว้หรือไม่

หากไม่เมาท์nginx.confไฟล์ทุกอย่างก็โอเค ดังนั้นฉันจะเมานต์ไฟล์คอนฟิกูเรชันได้อย่างไร?


ผลลัพธ์ls -al .คืออะไร? อยากดูว่า pwd ของคุณเป็นอย่างไร
Tri Nguyen

1
ในกรณีของฉันฉันได้แมปไดเรกทอรีจากโฮสต์ไปยังไฟล์ในคอนเทนเนอร์โดยไม่ได้ตั้งใจ การรีสตาร์ทคอนเทนเนอร์ไม่ได้ผลอีกต่อไป ฉันต้องลบคอนเทนเนอร์ ( docker rm …) แล้วสร้างขึ้นใหม่
slhck

คำตอบ:


26

เนื่องจากนักเทียบท่าจะรับรู้$PWD/conf/nginx.confว่าเป็นโฟลเดอร์ไม่ใช่ไฟล์ ตรวจสอบว่า$PWD/conf/ไดเร็กทอรีมีnginx.confเป็นไดเร็กทอรีหรือไม่

ทดสอบด้วย

> cat $PWD/conf/nginx.conf 
cat: nginx.conf/: Is a directory

มิฉะนั้นเปิดประเด็นเทียบท่า
มันใช้งานได้ดีสำหรับฉันด้วยการกำหนดค่าเดียวกัน


ในฐานะผู้ใช้ Linux ระดับกลางฉันสงสัยว่าอะไรคือสาเหตุที่ทำให้ Linux ทราบว่าเป็นโฟลเดอร์ไม่ใช่ไฟล์
J. Scott Elblein

เพราะมันคือโฟลเดอร์จริงๆ หากไฟล์ไม่มีอยู่นักเทียบท่าจะสร้างโฟลเดอร์เนื่องจากอาร์กิวเมนต์โวลุ่ม-v
Mathieu Lescaudron

ตกลงดังนั้น Linux จะรับรู้ว่ามันเป็นโฟลเดอร์เท่านั้นหากนักเทียบท่าต้องสร้างขึ้นเนื่องจากเส้นทางที่ไม่มีอยู่ก่อนหน้านี้ แต่ถ้าnginx.confก่อนหน้านี้มีอยู่แล้วในเส้นทางนั้น Linux จะรับรู้ว่าเป็นไฟล์ใช่ไหม?
J. Scott Elblein

137

สิ่งนี้ไม่ควรเกิดขึ้นอีกต่อไป (ตั้งแต่ v2.2.0.0) ดูที่นี่


หากคุณใช้Docker สำหรับ Windowsข้อผิดพลาดนี้อาจเกิดขึ้นได้หากคุณเพิ่งเปลี่ยนรหัสผ่าน

วิธีแก้ไข:

  1. ขั้นแรกตรวจสอบให้แน่ใจว่าได้ลบการอัปเดตไดรฟ์ข้อมูลของคอนเทนเนอร์ที่เสียหาย
    docker rm -v <container_name>
    : ขั้นตอนด้านล่างอาจใช้ได้ผลโดยไม่จำเป็นต้องลบไดรฟ์ข้อมูลก่อน
  2. เปิด Docker Settings
  3. ไปที่แท็บ "ไดรฟ์ที่แชร์"
  4. คลิกลิงก์ "รีเซ็ตข้อมูลรับรอง ... " ที่ด้านล่างของหน้าต่าง
  5. แชร์ไดรฟ์ที่คุณต้องการใช้กับ Docker อีกครั้ง
  • คุณควรได้รับแจ้งให้ป้อนชื่อผู้ใช้ / รหัสผ่านของคุณ
  1. คลิก "สมัคร"
  2. ไปที่แท็บ "รีเซ็ต"
  3. คลิก "รีสตาร์ท Docker"
  4. สร้างคอนเทนเนอร์ / ไดรฟ์ข้อมูลของคุณใหม่

เครดิตไปที่ BaranOrnarli บน GitHub สำหรับการแก้ปัญหา


2
ขอบคุณ! มันได้ผลสำหรับฉันโดยเริ่มจากขั้นตอนที่สองและหลีกเลี่ยงขั้นตอนสุดท้าย
Mateo Hermosilla

1
ฉันสามารถแก้ไขปัญหาได้โดยเริ่มในขั้นตอนที่ 2 และข้ามข้อสุดท้ายไปด้วย ฉันไม่ต้องทำลายคอนเทนเนอร์ / ไดรฟ์ข้อมูลเพื่อติดตั้งอีกครั้ง
Christian Engel

ฉันเห็นด้วยกับ @MateoHermosilla ไม่จำเป็นต้องแยกคอนเทนเนอร์เพียง "รีเซ็ตข้อมูลรับรอง"
sintetico82

ฉันได้รับข้อผิดพลาดเดียวกันเมื่อพยายามเรียกใช้ proxy-deploy.sh ขณะติดตั้ง sandbox-proxy (hadoop) ตามนี้ soln. ไม่ได้แก้ไข
Vaibhav

2
นี่เป็นปัญหาสำหรับฉัน การรีเซ็ตรหัสผ่านคือทุกๆสองสามเดือนดังนั้นฉันจึงลืมที่จะรีเซ็ตข้อมูลประจำตัวของ Shared Drive ใน Docker
Anders Tornblad

41

TL; DR : ลบไดรฟ์ข้อมูลที่เกี่ยวข้องกับคอนเทนเนอร์

ค้นหาชื่อคอนเทนเนอร์โดยใช้docker ps -aจากนั้นลบคอนเทนเนอร์นั้นโดยใช้:

docker rm -v <container_name>

ปัญหา:

ข้อผิดพลาดที่คุณพบอาจเกิดขึ้นหากคุณเคยลองรันdocker runคำสั่งก่อนหน้านี้ในขณะที่ไฟล์ไม่อยู่ในตำแหน่งที่ควรอยู่ในไดเร็กทอรีโฮสต์

ในกรณีนี้ docker daemon จะสร้างไดเร็กทอรีภายในคอนเทนเนอร์แทนซึ่งต่อมาล้มเหลวในการแม็พกับไฟล์ที่เหมาะสมเมื่อไฟล์ที่ถูกต้องถูกใส่ในไดเร็กทอรีโฮสต์และคำสั่ง docker ถูกรันอีกครั้ง

วิธีการแก้:

ลบไดรฟ์ข้อมูลที่เกี่ยวข้องกับคอนเทนเนอร์ หากคุณไม่กังวลเกี่ยวกับปริมาณคอนเทนเนอร์อื่น ๆ คุณยังสามารถใช้:

docker volume rm $(docker volume ls -q)

คำสั่งในคำถามดั้งเดิมจะแสดงเฉพาะปริมาณโฮสต์ที่ใช้ docker volumeคำสั่ง / อินเตอร์เฟซที่เป็นเพียงการระบุชื่อและชื่อเล่มที่ไม่ได้เป็นส่วนหนึ่งของคำถามเดิม
programmerq

@programmerq ดูข้อผิดพลาดมันบอกว่าการเมาท์ล้มเหลวเมื่อพยายามเมานต์ที่/var/lib/docker/aufs/mnt/dcea22444e9ffda114593b18fc8b574adfada06947385aedc2ac09f199188fa0\\\"การหักเงินของฉัน: มีโฟลเดอร์อยู่แล้วเนื่องจากการเรียกใช้ก่อนหน้านี้ดังนั้นหากคุณพยายามแมปไฟล์กับโฟลเดอร์นั้นก็จะล้มเหลว
อยุธยา

สองสิ่งนี้อาจผิดพลาดโฮสต์มีสิ่งผิดปกติหรือไดรฟ์ข้อมูลที่สร้างไว้แล้วมีสิ่งที่ไม่ถูกต้อง สมมติว่าโฮสต์ถูกต้องฉันคิดว่ามันจะดีกว่าถ้าจะเคลียร์ปัญหาเกี่ยวกับไดรฟ์ข้อมูลที่มีอยู่
อยุธยา

1
นี่เป็นคำตอบที่ถูกต้องเมื่อคอนเทนเนอร์เชื่อมโยงกับโวลุ่มแล้วและประเภทของโวลุ่มจะถูกเปลี่ยนในการรันครั้งต่อไป ดังนั้นการลบระดับเสียงอาจช่วยได้!
Yan Foto

1
นี่เป็นประโยชน์ ปัญหาในกรณีของฉันคือฉันยังมีตู้คอนเทนเนอร์เก่าอยู่ ใช้ docker rm เพื่อปะทะพวกเขาจากนั้นการเขียน docker-compose ก็ทำงานได้อย่างถูกต้อง
Max Tardiveau

7

ตอบโจทย์สำหรับคนใช้Docker Toolbox

มีคำตอบอย่างน้อย 3 คำตอบเกี่ยวกับปัญหานี้ แต่อธิบายไม่ถูกต้องและไม่ได้ให้คำตอบอย่างเต็มที่ นี่เป็นเพียงปัญหาโฟลเดอร์การติดตั้ง

คำอธิบายปัญหา:

Docker Toolbox ข้ามข้อกำหนด Hyper-V ของ Docker โดยการสร้างเครื่องเสมือน (ใน VirtualBox ซึ่งมาพร้อมกับชุดอุปกรณ์) มีการติดตั้ง Docker และรันภายใน VM เพื่อให้ Docker ทำงานได้อย่างถูกต้องจำเป็นต้องมีการเข้าถึงจากเครื่องโฮสต์ ซึ่งตรงนี้มันไม่ได้

หลังจากที่ฉันติดตั้ง Docker Toolbox มันได้สร้าง VirtualBox VM และติดตั้งC:\Usersเข้ากับเครื่องเท่านั้นเช่น\c\Users\. โปรเจ็กต์ของฉันC:\projectsไม่มีที่ไหนเลยบนโวลุ่มที่เมาท์ เมื่อฉันส่งเส้นทางไปยัง VM จะไม่มีอยู่เนื่องจากC:\projectsไม่ได้ต่อเชื่อม ดังนั้นข้อผิดพลาดข้างต้น

สมมติว่าฉันมีโปรเจ็กต์ของฉันที่มีการกำหนดค่า ngnix ใน C:/projects/project_name/

แก้ไข:

  1. ไปที่ VirtualBox คลิกขวาที่ Default (VM จาก Docker)> Settings> Shared Folders ป้อนคำอธิบายภาพที่นี่

  2. คลิกไอคอนขนาดเล็กที่มีเครื่องหมายบวกทางด้านขวาเพิ่มการแบ่งปันใหม่ ฉันใช้การตั้งค่าต่อไปนี้:

ป้อนคำอธิบายภาพที่นี่

  1. ด้านบนจะแมปC:\projectsกับ/projects( ROOT/projects) ใน VM ซึ่งหมายความว่าตอนนี้คุณสามารถอ้างอิงเส้นทางใดก็ได้ในโปรเจ็กต์เช่นนี้: /projects/project_name- เพราะproject_nameจากC:\projects\project_nameนี้ถูกเมาท์

หากต้องการใช้เส้นทางสัมพัทธ์โปรดพิจารณาตั้งชื่อเส้นทางc/projectsไม่projects

  1. รีสตาร์ททุกอย่างและตอนนี้ควรจะทำงานได้อย่างถูกต้อง ฉันหยุดเครื่องเสมือนด้วยตนเองใน VirtualBox และรีสตาร์ท Docker Toolbox CLI

ในไฟล์นักเทียบท่าของฉันตอนนี้ฉันอ้างอิงสิ่งnginx.confนี้:

volumes:
    - /projects/project_name/docker_config/nginx/nginx.conf:/etc/nginx/conf.d/default.conf

โดยที่ nginx.conf อยู่ใน C:\projects\project_name\docker_config\nginx\nginx.conf


7

คำอธิบายที่ได้รับจาก @Ayushya เป็นเหตุผลที่ทำให้ฉันได้รับข้อความแสดงข้อผิดพลาดที่ค่อนข้างสับสนนี้และการดูแลทำความสะอาดที่จำเป็นสามารถทำได้อย่างง่ายดายดังนี้:

$ docker container prune
$ docker volume prune

6

ผมมีปัญหาเหมือนกัน. ฉันใช้ Docker Desktop กับ WSL ใน Windows 10 17.09

สาเหตุของปัญหา:

ปัญหาคือ Docker สำหรับ Windows คาดว่าคุณจะจัดหาเส้นทางโวลุ่มของคุณในรูปแบบที่ตรงกับสิ่งนี้:

/c/Users/username/app

แต่ WSL ใช้รูปแบบแทน:

/mnt/c/Users/username/app

สิ่งนี้สับสนเพราะเมื่อตรวจสอบไฟล์ในคอนโซลฉันเห็นมันและสำหรับฉันทุกอย่างถูกต้อง ฉันไม่ได้ตระหนักถึงการเทียบท่าสำหรับความคาดหวังของ Windows เกี่ยวกับเส้นทางปริมาณ

แนวทางแก้ไขปัญหา:

ฉันผูกจุดเชื่อมต่อที่กำหนดเองเพื่อแก้ไขความแตกต่างของ Docker สำหรับ Windows และ WSL:

sudo mount --bind /mnt/c /c

เช่นเดียวกับที่แนะนำในคู่มือที่น่าทึ่งนี้: การตั้งค่า Docker สำหรับ Windows และ WSL เพื่อทำงานอย่างไม่มีที่ติและทุกอย่างทำงานได้อย่างสมบูรณ์ในขณะนี้

ก่อนที่ฉันจะเริ่มใช้ WSL ฉันใช้ Git Bash และฉันก็มีปัญหานี้เช่นกัน


1
รายละเอียดเพิ่มเติมที่นี่: github.com/10up/wp-local-docker/issues/…
nbeuchat

4

ฉันใช้ Docker ToolBox สำหรับ Windows โดยค่าเริ่มต้นไดรฟ์ Cจะติดตั้งโดยอัตโนมัติดังนั้นเพื่อที่จะติดตั้งไฟล์ให้ตรวจสอบไฟล์และโฟลเดอร์ของคุณอยู่ในไดรฟ์ C

ตัวอย่าง: C:\Users\%USERNAME%\Desktop


1
โฟลเดอร์ที่ติดตั้งของฉันคือ C: \ x-suite \; ฉันแชร์ไดรฟ์ C ของฉัน, แต่ยังไม่สามารถแก้ปัญหาได้
袁文涛

คุณใช้ Docker ToolBox หรือไม่
Abhishek DK

minikube + virtualBox + Docker ToolBox, localkube เลิกใช้แล้วฉันควรใช้ไดรเวอร์อะไร
袁文涛

หากคุณติดตั้งจาก Dockercompose ให้ใช้ $ {pwd} / <path>
Abhishek DK

1
หากคุณกำลังทำใน Dockerfile ให้ใช้ VOLUME / c / x-suite
Abhishek DK

2

อาจมีคนพบว่าสิ่งนี้มีประโยชน์ ไฟล์เขียนของฉันมีโวลุ่มต่อไปนี้

./file:/dir/file

เนื่องจากไม่มี. / ไฟล์จึงถูกต่อเข้ากับ ABC (โดยค่าเริ่มต้นเป็นโฟลเดอร์)

ในกรณีของฉันฉันมีคอนเทนเนอร์ที่เป็นผลมาจาก

docker commit ABC cool_image

เมื่อฉันสร้าง. / ไฟล์และรันในภายหลังdocker-compose upฉันมีข้อผิดพลาด:

[... ] คุณกำลังพยายามต่อเชื่อมไดเรกทอรีเข้ากับไฟล์ (หรือในทางกลับกัน)? ตรวจสอบว่าเส้นทางโฮสต์ที่ระบุมีอยู่หรือไม่และเป็นประเภทที่คาดไว้หรือไม่

ภาชนะที่นำขึ้นจากcool_imageจำได้ว่า/dir/fileเป็นไดเรกทอรีและมันขัดแย้งกับสร้างขึ้นเมื่อเร็ว ๆ ./fileนี้และติดตั้ง

วิธีแก้ปัญหาคือ:

touch ./file
docker run abc_image --name ABC -v ./file:/dir/file
# ... desired changes to ABC
docker commit ABC cool_image

ขอบคุณนี่เป็นปัญหาของฉันเช่นกันเนื่องจากฉันมีการตั้งค่า Docker ที่ค่อนข้างซับซ้อน!
rmcsharry

1

ใน Windows 10 ฉันได้รับข้อผิดพลาดนี้โดยไม่ต้องเปลี่ยนแปลงอะไรในdocker-compose.ymlไฟล์หรือการกำหนดค่า Docker โดยทั่วไป

ในกรณีของฉันฉันใช้ VPN กับนโยบายไฟร์วอลล์ที่บล็อกพอร์ต 445

หลังจากตัดการเชื่อมต่อจาก VPN ปัญหาจะหายไป

ดังนั้นฉันขอแนะนำให้ตรวจสอบไฟร์วอลล์ของคุณและอย่าใช้พร็อกซีหรือ VPN เมื่อเรียกใช้ Docker Desktop

ตรวจสอบDocker สำหรับ windows - กฎไฟร์วอลล์สำหรับไดรฟ์ที่แชร์สำหรับรายละเอียดเพิ่มเติม

ฉันหวังว่านี่จะช่วยคนอื่นได้


1

คุณช่วยกรุณาใช้เส้นทางสัมบูรณ์ / สมบูรณ์แทนได้$PWD/conf/nginx.confไหม จากนั้นก็จะทำงาน

EX:docker run --name nginx-container5 --rm  -v /home/sree/html/nginx.conf:/etc/nginx/nginx.conf -d -p 90:80 nginx
b9ead15988a93bf8593c013b6c27294d38a2a40f4ac75b1c1ee362de4723765b

root@sree-VirtualBox:/home/sree/html# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
b9ead15988a9        nginx               "nginx -g 'daemon of…"   7 seconds ago       Up 6 seconds        0.0.0.0:90->80/tcp   nginx-container5
e2b195a691a4        nginx               "/bin/bash"              16 minutes ago      Up 16 minutes       0.0.0.0:80->80/tcp   test-nginx

ถ้าคุณหนีด้วยเครื่องหมายอัญประกาศคู่: docker run -d --rm -v "$ PWD / nginx.conf: /etc/nginx/nginx.conf" nginx ก็ไม่ควรสร้างความแตกต่างเนื่องจากเชลล์จะแปลก่อนที่จะส่ง นักเทียบท่าวิ่งและจริงๆแล้วมันไม่ได้สร้างความแตกต่างอย่างน้อยสำหรับฉัน
Manumie

1

ฉันประสบปัญหาเดียวกันกับการใช้ Docker ผ่าน WSL1 บน Windows 10 ด้วยบรรทัดคำสั่งนี้:

echo $PWD
/mnt/d/nginx

docker run --name nginx -d \
  -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
nginx

ฉันแก้ไขโดยเปลี่ยนเส้นทางสำหรับไฟล์บนระบบโฮสต์เป็นพา ธ สัมบูรณ์สไตล์ UNIX:

docker run --name nginx -d \
  -v /d/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
nginx

หรือใช้เส้นทางแบบสัมบูรณ์ของ Windows /แทนการใช้\ตัวคั่นเส้นทาง:

docker run --name nginx -d \
  -v D:/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
nginx

คุณสังเกตเห็นความแตกต่างของประสิทธิภาพเมื่อใช้เส้นทางสไตล์ Windows เทียบกับพา ธ สไตล์ Unix หรือไม่
J.Scott Elblein

บอกไม่ถูก. ฉันใช้ Docker สำหรับ Windows เพื่อทดสอบ / พัฒนาและไม่เคยตรวจสอบประสิทธิภาพเลย
bwibo

0

การอัปเดต Virtual Box เป็น 6.0.10 แก้ไขปัญหานี้สำหรับ Docker Toolbox

https://github.com/docker/toolbox/issues/844

ฉันพบข้อผิดพลาดประเภทนี้:


mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects
$ touch resolv.conf

mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects
$ docker run --rm -it -v $PWD/resolv.conf:/etc/resolv.conf ubuntu /bin/bash
C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/c/Users/mlepisto/G/Projects/resolv.conf\\\" to rootfs \\\"/mnt/sda1/var/lib/docker/overlay2/61eabcfe9ed7e4a87f40bcf93c2a7d320a5f96bf241b2cf694a064b46c11db3f/merged\\\" at \\\"/mnt/sda1/var/lib/docker/overlay2/61eabcfe9ed7e4a87f40bcf93c2a7d320a5f96bf241b2cf694a064b46c11db3f/merged/etc/resolv.conf\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

# mounting to some other file name inside the container did work just fine
mlepisto@DESKTOP-VKJ76GO MINGW64 ~/G/Projects/
$ docker run --rm -it -v $PWD/resolv.conf:/etc/resolv2.conf ubuntu /bin/bash
root@a5020b4d6cc2:/# exit
exit

หลังจากอัปเดต VitualBox คำสั่งทั้งหมดทำงานได้ดี🎉


0

มีรอยขีดข่วนหัวเหมือนกันเพราะฉันไม่มีไฟล์ในเครื่องดังนั้นมันจึงสร้างมันเป็นโฟลเดอร์

mimas@Anttis-MBP:~/random/dockerize/tube$ ls
Dockerfile
mimas@Anttis-MBP:~/random/dockerize/tube$ docker run --rm -v $(pwd)/logs.txt:/usr/app/logs.txt devopsdockeruh/first_volume_exercise
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:430: container init caused \"rootfs_linux.go:58: mounting \\\"/Users/mimas/random/dockerize/tube/logs.txt\\\" to rootfs \\\"/var/lib/docker/overlay2/75891ea3688c58afb8f0fddcc977c78d0ac72334e4c88c80d7cdaa50624e688e/merged\\\" at \\\"/var/lib/docker/overlay2/75891ea3688c58afb8f0fddcc977c78d0ac72334e4c88c80d7cdaa50624e688e/merged/usr/app/logs.txt\\\" caused \\\"not a directory\\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
mimas@Anttis-MBP:~/random/dockerize/tube$ ls
Dockerfile  logs.txt/

0

ไม่ทราบ: คุณกำลังพยายามต่อเชื่อมไดเรกทอรีเข้ากับไฟล์ (หรือในทางกลับกัน)? ตรวจสอบว่าเส้นทางโฮสต์ที่ระบุมีอยู่หรือไม่และเป็นประเภทที่คาดไว้หรือไม่

ฉันมีข้อผิดพลาดที่คล้ายกันกับ niginx ในสภาพแวดล้อม Mac Docker ไม่รู้จักไฟล์ default.conf อย่างถูกต้อง เมื่อเปลี่ยนเส้นทางสัมพัทธ์เป็นเส้นทางสัมบูรณ์ข้อผิดพลาดได้รับการแก้ไข

      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf

0

สำหรับฉันสิ่งนี้ไม่ได้ผล:

volumes:
  - ./:/var/www/html
  - ./nginx.conf:/etc/nginx/conf.d/site.conf

แต่มันใช้งานได้ดี (เห็นได้ชัดว่าย้ายไฟล์ config ของฉันไปไว้ในไดเร็กทอรีใหม่ด้วย:

volumes:
  - ./:/var/www/html
  - ./nginx/nginx.conf:/etc/nginx/conf.d/site.conf

0

ฉันจะเล่ากรณีของฉันที่นี่เพราะอาจช่วยประหยัดเวลาให้คนอื่นได้มากในอนาคต

ฉันมี Docker-compose ที่ใช้งานได้อย่างสมบูรณ์แบบบน macOS ของฉันจนกระทั่งฉันเริ่มใช้ Docker-in-Docker ใน Gitlab CI ฉันได้รับอนุญาตให้ทำงานเป็น Master ในที่เก็บเท่านั้นและ Gitlab CI เป็นโฮสต์และตั้งค่าโดยบุคคลอื่นและไม่มีการแชร์ข้อมูลอื่น ๆ เกี่ยวกับวิธีการตั้งค่า ฯลฯ

สิ่งต่อไปนี้ทำให้เกิดปัญหา:

volumes:
  - ./.docker/nginx/wordpress/wordpress.conf:/etc/nginx/conf.d/default.conf

เฉพาะเมื่อฉันสังเกตเห็นว่าสิ่งนี้อาจทำงานภายใต้หน้าต่าง (ชั่วโมงเกาหัว) ฉันลองเปลี่ยนชื่อ wodpress.conf เป็น default.conf และตั้งชื่อพา ธ dir:

volumes:
  - ./.docker/nginx/wordpress:/etc/nginx/conf.d

วิธีนี้ช่วยแก้ปัญหาได้!


0

ฉันมีปัญหานี้ใน Windows 7 เนื่องจาก Dockerfile ของฉันอยู่ในไดรฟ์อื่น

นี่คือสิ่งที่ฉันทำเพื่อแก้ไขปัญหา:

  1. เปิด VirtualBox Manager
  2. เลือกคอนเทนเนอร์ "เริ่มต้น" และแก้ไขการตั้งค่า
  3. เลือกโฟลเดอร์ที่แชร์แล้วคลิกไอคอนเพื่อเพิ่มโฟลเดอร์ที่แชร์ใหม่
  4. เส้นทางโฟลเดอร์: x: \
  5. ชื่อโฟลเดอร์: / x
  6. ตรวจสอบการติดตั้งอัตโนมัติและทำให้ถาวร
  7. รีสตาร์ทเครื่องเสมือน

เมื่อถึงจุดนี้docker-compose upควรทำงาน


0

ฉันได้รับข้อผิดพลาดเดียวกันใน Windows10 หลังจากอัปเดต Docker: 2.3.0.2 (45183)

... \\\"not a directory\\\"\"":ไม่ทราบสาเหตุ: คุณกำลังพยายามต่อเชื่อมไดเรกทอรีเข้ากับไฟล์ (หรือในทางกลับกัน)? ตรวจสอบว่าเส้นทางโฮสต์ที่ระบุมีอยู่หรือไม่และเป็นประเภทที่คาดไว้หรือไม่

ฉันใช้เส้นทางที่สมบูรณ์แบบนี้//C/workspace/nginx/nginx.confและทุกอย่างก็เหมือนมีเสน่ห์
การอัปเดตทำให้นักเทียบท่าของฉันขัดข้องและฉันต้องเปลี่ยนเส้นทางไป/C/workspace/nginx/nginx.confเป็นด้วยซิงเกิล/สำหรับรูท


0

โปรดทราบว่าสถานการณ์นี้จะเกิดขึ้นเช่นกันหากคุณพยายามต่อเชื่อมไดรฟ์ข้อมูลจากโฮสต์ซึ่งยังไม่ได้เพิ่มลงในส่วนทรัพยากร> การแชร์ไฟล์ของการตั้งค่า Docker

ป้อนคำอธิบายภาพที่นี่

การเพิ่มรูทพา ธ เป็นรีซอร์สการแชร์ไฟล์จะอนุญาตให้ Docker เข้าถึงรีซอร์สเพื่อเชื่อมต่อกับคอนเทนเนอร์ โปรดทราบว่าคุณอาจต้องลบเนื้อหาในคอนเทนเนอร์ Docker ของคุณเพื่อพยายามต่อเชื่อมไดรฟ์ข้อมูลอีกครั้ง

ตัวอย่างเช่นหากแอปพลิเคชันของคุณอยู่ที่ /mysites/myappคุณจะต้องเพิ่ม/mysitesเป็นตำแหน่งทรัพยากรการแชร์ไฟล์


0

ฉันมีปัญหาเดียวกันนักเทียบท่าเขียนกำลังสร้างไดเร็กทอรีแทนไฟล์จากนั้นหยุดทำงาน

ฉันทำอะไรไป:

  1. เรียกใช้คอนเทนเนอร์โดยไม่ต้องแมปใด ๆ

  2. คัดลอก.confไฟล์ไปยังตำแหน่งโฮสต์:

    docker cp containername:/etc/nginx/nginx.conf ./nginx.conf

  3. นำภาชนะออก ( docker-compose down)

  4. ใส่การแมปกลับ

  5. ติดตั้งคอนเทนเนอร์อีกครั้ง

เทียบท่าเขียนจะได้พบกับ.confไฟล์และแผนที่มันแทนการพยายามที่จะสร้างไดเรกทอรี


-2

l ได้แก้ปัญหาเมาท์แล้ว ฉันใช้สภาพแวดล้อม Win 7 และเกิดปัญหาเดียวกันกับฉัน

คุณกำลังพยายามเมานต์ไดเร็กทอรีเข้ากับไฟล์หรือไม่?

คอนเทนเนอร์มีไดเร็กทอรีซิงค์เริ่มต้นที่C:\Users\ดังนั้นฉันจึงย้ายโปรเจ็กต์ไปที่C:\Users\จากนั้นสร้างโปรเจ็กต์ใหม่ ตอนนี้ใช้งานได้แล้ว

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