Hộp công cụ Docker - Máy chủ cục bộ không hoạt động


100

Vì vậy, tôi đang sử dụng Docker Toolbox vì tôi không có Hyper-V trên máy tính của mình vì nó không phải là Windows 10 pro. Mọi thứ dường như hoạt động tốt, nhưng khi tôi cố gắng truy cập trình duyệt của mình, 0.0.0.0:80nó luôn trả lại cho tôi: Không thể truy cập trang web này

Nhưng khi tôi chạy lệnh: docker container psTôi nhận được như sau: 0.0.0.0:80->80/tcpnghĩa là địa chỉ này sẽ hoạt động. Tôi đã tìm kiếm các vấn đề về stackoverflow và github. Bây giờ tôi đang mắc kẹt.

Tui bỏ lỡ điều gì vậy?

Cảm ơn, Mark

BIÊN TẬP:

Sử dụng docker-machine ip defaulttrả lại cho tôi 192.168.99.100. Tôi chạy điều đó trên cổng 80. Tôi vẫn nhận được kết quả tương tự ngoại trừ việc địa chỉ trở thành id vùng chứa:https://fd677edg12

Tôi chạy mà lệnh trên cmd để tìm ipv4 tôi: cmd /k ipconfig /all. Đặt kết quả với cổng và nó trả về cùng một thứ:https://fd677edg12


1
0.0.0.0 không phải là địa chỉ thực, điều đó có nghĩa là cổng được liên kết với tất cả các giao diện máy chủ của docker (máy tính windows của bạn). Hãy thử localhost: 80 hoặc bất kỳ địa chỉ ip nào mà máy tính của bạn có: 80
fvu 17/03/17

@fvu Tôi vẫn nhận được "không thể truy cập trang web này". Tôi cũng đã thử docker-machine default ip -> 192.168.99.100Vì vậy, tôi đặt điều này trong địa chỉ: 192.168.99.100:80Tôi vẫn nhận được cùng một lý do.
Đánh dấu

1
Nếu bạn đang được chuyển hướng - đó là ứng dụng của bạn đã bị hỏng. Giả sử Docker đang chạy trên cùng một máy tính, bạn sẽ có thể để localhost: 80
user2105103

Câu trả lời:


179

Docker Toolbox không có nhiều tiện ích như Docker dành cho Windows, nhưng bạn đã sử dụng đúng vì bạn đang sử dụng phiên bản Home.

Trong Hộp công cụ, sẽ không có gì localhostvà sẽ là 192.168.99.100theo mặc định, vì nó đang chạy một máy ảo Linux trong VirtualBox.

Vì vậy, nếu bạn chạy docker run -p 80:80 nginx

(lưu ý rằng tôi phải xuất bản một cổng 192.168.99.100để nghe trên cổng đó)

Sau đó sẽ http://192.168.99.100làm việc.


Cảm ơn vì sự trả lời. Tôi đang làm theo các bước của bạn ngoại trừ đã thêm docker run -p 80:80 -d nginx. Tôi đi đến địa chỉ và nó chuyển hướng tôi đến https://dev/, một lần nữa nó lại thông báo rằng không thể truy cập được trang web. Tôi cũng muốn xác minh xem tôi có bất kỳ thứ gì là hoststệp không (mặc dù tôi biết đó không phải là localhost). Tôi nhận xét mọi thứ ở đó.
Đánh dấu

Sau nhiều lần thử, cuối cùng tôi đã làm được. Đáng buồn thay, tôi không quá chắc chắn vấn đề là gì.
Đánh dấu

1
Thông tin bổ sung: Hộp công cụ Docker (được sử dụng trong Windows 7, 8, 8.1 và 10 Home) thực sự chỉ là một tập lệnh khởi động được bao quanh bởi docker-machinecli. Bạn có thể sử dụng docker-machine --helpđể xem những gì bạn có thể làm để quản lý VirtualBox VM (hoặc tạo thêm).
Bret Fisher

64

Ban đầu, tôi gặp một số vấn đề khi truy cập Ứng dụng của mình tại localhost: 8080 trong khi sử dụng DockerToolBox và OracleVM VirtualBox.

Trong VirtualBox:

  1. Nhấp vào máy thích hợp (có thể là máy có nhãn "mặc định")
  2. Cài đặt
  3. Mạng> Bộ điều hợp 1> Nâng cao> Chuyển tiếp cổng
  4. Nhấp vào "+" để thêm Quy tắc mới
  5. Đặt Cổng Máy chủ 8080& Cổng Khách 8080; hãy nhớ để trống IP Máy chủ và IP Khách

Chạy lệnh:

docker run -p 8080:8080 ${image_id}

Do thiết lập CORS trên API từ xa, tôi phải chạy dưới dạng localhost: 8080. Thật tuyệt, nó rất đơn giản, cảm ơn!
phazei

1
Kinh ngạc. Ở đâu cũng nói không làm được nhưng đây rồi.
superPhreshHackerKid

Ngoài ra, hãy đảm bảo rằng bạn không làm rối tung mọi thứ với những thứ khác đang nghe trên cổng này hoặc các mục nhập localhost / 127.0.0.1 trong tệp máy chủ của bạn ( C:\Windows\System32\drivers\etc\hosts) - Tôi phải kiểm tra cả hai trước khi nó hoạt động với tôi ;-)
msa

Làm việc như một sự quyến rũ!
Daggie Blanqx - Douglas Mwangi

43

Tôi đang làm theo hướng dẫn về docker cho windows trong https://docs.docker.com/docker-for-windows/#set-up-tab-completion-in-powershell và bị kẹt ở bước # 6 khi kiểm tra nginx trong trình duyệt web . Có vẻ như tôi đã gặp phải vấn đề tương tự vì tôi cũng sử dụng Windows Home và không có Hyper-V. Cách giải quyết của tôi khá đơn giản:

  1. kiểm tra mặc định IP docker của bạn

$ docker-machine ip mặc định

192.168.99.100

  1. Chuyển đến Máy ảo Oracle để thiết lập chuyển tiếp cổng. Đảm bảo cài đặt mạng là NAT và thêm chuyển tiếp cổng. IP máy chủ: 127.0.0.1, IP khách: 192.168.99.100, tất cả cổng được đặt thành 80 như thế này

  2. Thử lại trình duyệt của bạn và chạy http: // localhost hoặc http://127.0.0.1 (có thể thêm cả cổng 80). Nó sẽ chạy.

Vấn đề là IP nginx có nghĩa là có thể truy cập được trong Máy ảo docker, vì vậy chúng tôi cần cài đặt chuyển cổng đó để truy cập trực tiếp trong trình duyệt của máy chủ


2
Tôi cần một trường hợp khi HOST:CONTAINERcác cổng khác nhau, ví dụ docker run --detach --publish 8081:80 --name webserver nginx. Nhận thấy rằng trong trường hợp này, tôi chỉ phải chuyển tiếp HOSTcổng, tức là trong cài đặt VirtualBox Host IP=127.0.0.1; Host Port=8081; Guest IP=192.168.99.100; Guest Port=8081, không phải 80như tôi đã nghĩ trước đây. Có vẻ như trong máy tính Windows 7 của tôi với Docker Hộp công cụ Docker chuyển tiếp từ cổng vùng chứa 80đến 192.168.99:8081và tôi chuyển tiếp từ 192.168.99:8081đến localhost:8081192.168.99:8081không hiển thị bất kỳ thứ gì trong trình duyệt web.
and1er

13

Bạn có thể sử dụng localhostthay vì '192.168.99.100' bằng cách làm theo hướng dẫn:

Bước # 01:

docker-machine ip default

Bạn sẽ thấy IP mặc định

Bước # 02:

docker-machine stop default

Bước # 03:

  1. Mở VirtualBox Manager (từ chương trình bắt đầu trong cửa sổ tìm kiếm VirtualBox Manager)
  2. Chọn hình ảnh Docker Machine VirtualBox của bạn (ví dụ: mặc định)
  3. Mở Cài đặt -> Mạng -> Nâng cao -> Chuyển tiếp cổng
  4. Thêm tên ứng dụng của bạn, cổng máy chủ mong muốn và cổng khách của bạn i.e, app name : nginx, host: 127.0.0.1, host port: 80, guest port: 80

Bước # 04: Bây giờ bạn đã sẵn sàng khởi động Máy Docker của mình bằng cách thực hiện như sau:

docker-machine start default

Sau đó, chỉ cần khởi động vùng chứa Docker của bạn và bạn sẽ có thể truy cập nó qua localhost.

Có một cái nhìn ở đây để biết chi tiết.


2

Để ánh xạ các cổng được mong đợi localhostthay vì nhấn trực tiếp vào IP của docker-máy, bạn có thể sử dụng VirtualBox CLI.

Nếu máy ảo docker-machine (ở đây được gọi là default) đang chạy, hãy thêm và xóa các quy tắc như sau:

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

Nếu máy ảo không chạy hoặc bạn muốn dừng trước khi thay đổi nó:

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

Định dạng của quy tắc chuyển tiếp cổng ở đâu [<name>],tcp|udp,[<hostip>],<hostport>,[<guestip>], <guestport>.

Lưu ý rằng trong VirtualBox, bạn muốn ánh xạ tới cổng máy chủ của bản đồ Docker, không phải cổng vùng chứa bên trong. Bạn đang ánh xạ máy chủ -> VM, sau đó Docker ánh xạ máy ảo -> vùng chứa.

Xem tài liệu VirtualBox .


1

Đây là một cách dễ dàng khác để tránh nhập ip 192.168.99.100. Đi tới C:\Windows\System32\drivers\etc\hostsvà thêm vào cuối tệp:

192.168.99.100 docker.awesome hoặc bất kỳ tên nào bạn thích.

Lưu tệp (Bạn cần có quyền quản trị vì vậy hãy đảm bảo bạn nhấp chuột phải vào tệp và chạy với tư cách quản trị viên để có thể lưu tệp khi bạn chỉnh sửa).

Truy cập tên miền bạn đã chọn, docker.awesome: 8080 trong trường hợp này và bạn đã có nó.


0

Sau rất nhiều thử nghiệm, tôi đã có được bảng thông báo này.

  1. Lệnh chạy của docker mà tôi đã sử dụng - docker run -p 4680: 8080 --name bb bulletinboard: 1.0 Ở đây, 4680 là số cổng localhost. 8080 là số cảng container, cổng mà container sẽ lắng nghe. Số cổng này được đề cập trong lệnh EXPOSE trong Dockerfile.

  2. Sau đó, truy cập trình duyệt web và nhập 192.168.99.100:4680

Ở đây, 192.168.99.100 là địa chỉ IP của máy docker (sử dụng lệnh -> docker-machine ip)

  1. Sau đó, trang trình duyệt của bạn sẽ mở ra -

nhập mô tả hình ảnh ở đây

Hy vọng thứ này sẽ giúp đỡ bạn!!

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.