Docker Toolbox - Localhost ไม่ทำงาน


100

ดังนั้นฉันจึงใช้ Docker Toolbox เพราะฉันไม่มี Hyper-V ในเครื่องเนื่องจากไม่ใช่ Windows 10 pro ทุกอย่างดูเหมือนจะทำงานได้ดี แต่เมื่อฉันพยายามเปิดเบราว์เซอร์0.0.0.0:80มันจะส่งคืนฉันเสมอ: ไม่สามารถเข้าถึงไซต์นี้ได้

แต่เมื่อฉันเรียกใช้คำสั่ง: docker container psฉันได้รับสิ่งต่อไปนี้: 0.0.0.0:80->80/tcpหมายความว่าที่อยู่นี้ควรใช้งานได้ ฉันค้นหาปัญหา stackoverflow และ github ตอนนี้ผมติดงาน

ฉันพลาดอะไรไปรึเปล่า?

ขอบคุณมาร์ค

แก้ไข:

โดยใช้ผลตอบแทนฉันdocker-machine ip default 192.168.99.100ฉันรันบนพอร์ต 80 ฉันยังคงได้ผลลัพธ์เหมือนเดิมยกเว้นว่าแอดเดรสกลายเป็น ID คอนเทนเนอร์:https://fd677edg12

ฉันรันคำสั่งนั้นบน cmd เพื่อค้นหา ipv4 ของฉัน: cmd /k ipconfig /all. ใส่ผลลัพธ์ด้วยพอร์ตและส่งคืนสิ่งเดียวกัน:https://fd677edg12


1
0.0.0.0 ไม่ใช่ที่อยู่จริงหมายความว่าพอร์ตถูกผูกไว้กับอินเทอร์เฟซโฮสต์ของนักเทียบท่า (คอมพิวเตอร์ Windows ของคุณ) ทั้งหมด ลอง localhost: 80 หรือที่อยู่ IP ใดก็ตามที่คอมพิวเตอร์ของคุณมี: 80
fvu

@fvu ฉันยังคงได้รับ "ไม่สามารถเข้าถึงไซต์นี้ได้" ฉันลองdocker-machine default ip -> 192.168.99.100แล้วด้วยดังนั้นฉันจึงใส่ที่อยู่: 192.168.99.100:80ฉันยังคงได้ผลลัพธ์เหมือนเดิม
ทำเครื่องหมาย

1
หากคุณกำลังถูกเปลี่ยนเส้นทางแสดงว่าแอปของคุณเสีย สมมติว่านักเทียบท่าทำงานบนคอมพิวเตอร์เครื่องเดียวกันคุณควรจะสามารถlocalhost: 80
user2105103

คำตอบ:


179

Docker Toolbox ไม่ได้รับความสะดวกสบายมากเท่า Docker สำหรับ Windows แต่คุณใช้งานได้ถูกต้องเนื่องจากคุณใช้ Home edition

ใน Toolbox จะไม่มีอะไรlocalhostและจะเป็น192.168.99.100ค่าเริ่มต้นเนื่องจากใช้ Linux VM ใน VirtualBox

ดังนั้นถ้าคุณวิ่ง docker run -p 80:80 nginx

(สังเกตว่าฉันต้องเผยแพร่พอร์ต192.168.99.100เพื่อฟังพอร์ตนั้น)

จากนั้นไปhttp://192.168.99.100ควรทำงาน


ขอบคุณสำหรับการตอบกลับ docker run -p 80:80 -d nginxผมทำตามขั้นตอนของคุณยกเว้นเพิ่ม ฉันไปที่ที่อยู่และมันเปลี่ยนเส้นทางฉันไปhttps://dev/อีกครั้งมันบอกว่าไม่สามารถเข้าถึงไซต์ได้ ฉันต้องการตรวจสอบด้วยว่าฉันมีอะไรเป็นhostsไฟล์ (แม้ว่าฉันจะรู้ว่าไม่ใช่ localhost) ฉันแสดงความคิดเห็นทุกอย่างที่นั่น
มาร์ค

หลังจากพยายามหลายครั้งในที่สุดฉันก็ใช้งานได้ น่าเศร้าที่ฉันไม่แน่ใจว่าปัญหาคืออะไร
ทำเครื่องหมาย

1
ข้อมูลโบนัส: Docker Toolbox (ใช้ใน Windows 7, 8, 8.1 และ 10 Home) เป็นเพียงสคริปต์เริ่มต้นที่อยู่รอบ ๆdocker-machinecli คุณสามารถใช้docker-machine --helpเพื่อดูสิ่งที่คุณสามารถทำได้เพื่อจัดการ VirtualBox VM (หรือสร้างเพิ่มเติม)
Bret Fisher

64

ตอนแรกฉันมีปัญหาเล็กน้อยในการเข้าถึง Applications ของฉันที่ localhost: 8080 ในขณะที่ใช้ DockerToolBox และ OracleVM VirtualBox

ใน VirtualBox:

  1. คลิกเครื่องที่เหมาะสม (อาจเป็นเครื่องที่มีข้อความว่า "ค่าเริ่มต้น")
  2. การตั้งค่า
  3. เครือข่าย> อะแดปเตอร์ 1> ขั้นสูง> การส่งต่อพอร์ต
  4. คลิก "+" เพื่อเพิ่มกฎใหม่
  5. ชุดพอร์ตโฮสต์8080& เกสพอร์ต8080; อย่าลืมปล่อย Host IP และ Guest IP ว่างไว้

เรียกใช้คำสั่ง:

docker run -p 8080:8080 ${image_id}

เนื่องจากการตั้งค่า CORS บน API ระยะไกลฉันต้องเรียกใช้เป็น localhost: 8080 เยี่ยมมากมันง่ายมากขอบคุณ!
phazei

1
น่าอัศจรรย์. ทุกที่บอกว่าทำไม่ได้ แต่นี่มัน
superPhreshHackerKid

ตรวจสอบให้แน่ใจว่าคุณไม่ยุ่งกับสิ่งอื่น ๆ ที่ฟังบนพอร์ตนี้อยู่แล้วหรือ localhost / 127.0.0.1 รายการในไฟล์โฮสต์ของคุณ ( C:\Windows\System32\drivers\etc\hosts) - ฉันต้องตรวจสอบทั้งสองอย่างก่อนที่จะทำงานให้ฉัน ;-)
msa

ทำงานอย่างมีเสน่ห์!
Daggie Blanqx - Douglas Mwangi

43

ฉันติดตามการสอน Docker for windows ในhttps://docs.docker.com/docker-for-windows/#set-up-tab-completion-in-powershellและติดอยู่ในขั้นตอนที่ # 6 เมื่อทดสอบ nginx ในเว็บเบราว์เซอร์ . ดูเหมือนว่าฉันประสบปัญหาที่คล้ายกันเนื่องจากฉันใช้ Windows Home และไม่มี Hyper-V วิธีแก้ปัญหาของฉันค่อนข้างง่าย:

  1. ตรวจสอบค่าเริ่มต้น Docker IP ของคุณ

ค่าเริ่มต้น $ docker-machine ip

192.168.99.100

  1. ไปที่ Oracle Virtual Machine เพื่อตั้งค่าสำหรับการส่งต่อพอร์ต ตรวจสอบให้แน่ใจว่าการตั้งค่าเครือข่ายเป็น NAT และเพิ่มการส่งต่อพอร์ต Host IP: 127.0.0.1, Guest IP: 192.168.99.100 พอร์ตทั้งหมดตั้งค่าเป็น 80 แบบนี้

  2. ลองใช้เบราว์เซอร์ของคุณอีกครั้งและเรียกใช้http: // localhostหรือhttp://127.0.0.1 (สามารถเพิ่มพอร์ต 80 ได้ด้วย) มันควรจะวิ่ง

สิ่งนี้ก็คือ nginx IP นั้นมีไว้เพื่อให้สามารถเข้าถึงได้ภายในเครื่องเสมือนของนักเทียบท่าดังนั้นเราจึงต้องการการตั้งค่าพอร์ตสำหรับการลุยเพื่อที่จะเข้าถึงได้โดยตรงในเบราว์เซอร์ของเครื่องโฮสต์


2
ผมจำเป็นต้องมีกรณีเมื่อพอร์ตจะแตกต่างกันเช่นHOST:CONTAINER docker run --detach --publish 8081:80 --name webserver nginxพบว่าในกรณีนี้ผมต้องส่งต่อHOSTพอร์ตเท่านั้นเช่นในการตั้งค่า VirtualBox Host IP=127.0.0.1; Host Port=8081; Guest IP=192.168.99.100; Guest Port=8081ไม่ใช่80อย่างที่ฉันควรจะเป็นมาก่อน ดูเหมือนในเครื่อง Windows 7 ของฉันที่มี Docker Toolbox Docker จะส่งต่อจากพอร์ตคอนเทนเนอร์80ไปยัง192.168.99:8081และฉันส่งต่อจาก192.168.99:8081ไปยังlocalhost:8081เนื่องจาก192.168.99:8081ไม่แสดงสิ่งใดในเว็บเบราว์เซอร์
and1er

13

คุณสามารถใช้localhostแทน '192.168.99.100' ได้โดยทำตามคำแนะนำ:

ขั้นตอนที่ # 01:

docker-machine ip default

คุณจะเห็น IP เริ่มต้น

ขั้นตอนที่ # 02:

docker-machine stop default

ขั้นตอนที่ # 03:

  1. เปิด VirtualBox Manager (จากโปรแกรมเริ่มต้นในการค้นหา windows VirtualBox Manager)
  2. เลือกอิมเมจ VirtualBox ของ Docker Machine (เช่นค่าเริ่มต้น)
  3. เปิดการตั้งค่า -> เครือข่าย -> ขั้นสูง -> การส่งต่อพอร์ต
  4. เพิ่มชื่อแอปของคุณพอร์ตโฮสต์ที่ต้องการและพอร์ตแขกของคุณ i.e, app name : nginx, host: 127.0.0.1, host port: 80, guest port: 80

ขั้นตอนที่ # 04: ตอนนี้คุณพร้อมที่จะเริ่มต้น Docker Machine ของคุณโดยดำเนินการดังต่อไปนี้:

docker-machine start default

จากนั้นเพียงแค่เริ่มคอนเทนเนอร์ Docker ของคุณและคุณจะสามารถเข้าถึงได้ผ่าน localhost

ดูรายละเอียดได้ที่นี่


2

ในการแมปพอร์ตที่คาดว่าจะlocalhostใช้แทนการกดที่ IP ของเครื่องเทียบท่าโดยตรงคุณสามารถใช้ VirtualBox CLI

หาก Docker-machine VM (ที่นี่เรียกว่าdefault) กำลังทำงานให้เพิ่มและลบกฎดังนี้:

> VBoxManage.exe controlvm "default" natpf1 "nginx,tcp,,8888,,8888"
> VBoxManage.exe controlvm "default" natpf1 delete nginx

หาก VM ไม่ทำงานหรือคุณต้องการหยุดก่อนที่จะแก้ไข:

> docker-machine stop
> VBoxManage.exe modifyvm "default" --natpf1 "nginx,tcp,,8888,,8888"
> VBoxManage.exe modifyvm "default" --natpf1 delete "nginx"
> docker-machine start

[<name>],tcp|udp,[<hostip>],<hostport>,[<guestip>], <guestport>ไหนรูปแบบของการปกครองส่งต่อพอร์ตที่เป็น

โปรดทราบว่าใน VirtualBox คุณต้องการแมปกับพอร์ตโฮสต์ของ Docker map ไม่ใช่พอร์ตคอนเทนเนอร์ภายใน คุณกำลังแมปโฮสต์ -> VM จากนั้น Docker จะแมป VM -> container

ดูเอกสาร VirtualBox


1

นี่เป็นอีกวิธีง่ายๆในการหลีกเลี่ยงการพิมพ์ ip 192.168.99.100 ไปที่C:\Windows\System32\drivers\etc\hostsและเพิ่มที่ส่วนท้ายของไฟล์:

192.168.99.100 docker.awesome หรือชื่อที่คุณชอบ

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

ไปที่ชื่อโดเมนที่คุณเลือกdocker.awesome: 8080ในกรณีนี้และคุณก็มี


0

หลังจากการทดลองหลายครั้งฉันก็ได้รับกระดานข่าวนี้

  1. คำสั่ง docker run ที่ฉันใช้ - docker run -p 4680: 8080 --name bb bulletinboard: 1.0 ที่นี่ 4680 คือหมายเลขพอร์ต localhost 8080 คือหมายเลขพอร์ตคอนเทนเนอร์ซึ่งเป็นพอร์ตที่คอนเทนเนอร์จะรับฟัง หมายเลขพอร์ตนี้ระบุไว้ในคำสั่ง EXPOSE ใน Dockerfile

  2. จากนั้นไปที่เว็บเบราว์เซอร์และพิมพ์ 192.168.99.100:4680

ที่นี่ 192.168.99.100 คือที่อยู่ IP ของเครื่องเทียบท่า (ใช้คำสั่ง -> ไอพีของเครื่องเทียบท่า)

  1. หลังจากนี้หน้าเบราว์เซอร์ของคุณควรเปิดไปที่ -

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

หวังว่านี่จะช่วยทุกคน !!

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