Wildfly trong Docker container không bắt đầu


10

Tôi đang cố gắng truy cập trang chào mừng của Wildfly đang chạy trên bộ chứa Docker trong Windows 10 Pro. Đây là những gì tôi đã làm:

Kéo hình ảnh:

docker pull jboss/wildfly

Chạy Wildfly container (điều này hoạt động tốt, trong nhật ký Wildfly tôi có thể thấy nó bắt đầu chính xác):

docker run -it -p 8080:8080 jboss/wildfly

Tìm ID container:

docker ps

Kiểm tra địa chỉ IP:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78

Địa chỉ IP là 172.17.0.2, trong một trình duyệt tôi truy cập http://172.17.0.2:8080/ nhưng trình duyệt bị treo và hết thời gian. Tôi đang thiếu gì?

CẬP NHẬT

Tôi cũng đã thử 127.0.0.1:8080và nó cũng không hoạt động

CẬP NHẬT2

Nhật ký bảng điều khiển:

docker --version

#Docker version 19.03.1, build 74b1e89e8a

docker run hello-world

#Hello from Docker!

docker run --detach --publish 8080:80 --name webserver nginx

#Unable to find image 'nginx:latest' locally
#latest: Pulling from library/nginx
#8ec398bc0356: Pull complete
#465560073b6f: Pull complete
#f473f9fd0a8c: Pull complete
#Digest:  sha256:b2d89d0a210398b4d1120b3e3a7672c16a4ba09c2c4a0395f18b9f7999b768f2
#Status: Downloaded newer image for nginx:latest
#c5cdb6de11240b5fe33bc424779721e1b44948797fd6ff389004d0766b71dd17

docker ps

#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 
#nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver

Xem câu trả lời stackoverflow.com/a/43762751/7873775 và thử 10.0.75.1:8080 và 10.0.75.2:8080.
Evgeniy Khyst

Xin lỗi, nhưng điều này đã không làm việc. Tôi có cả docker và trình duyệt chạy trên cùng một máy Windows 10. Không phải 10.0.75.xlà một địa chỉ bên ngoài và trình duyệt cố gắng tìm nó trên web?
ps0604

1
OK, chúng ta hãy cố gắng tìm ra vấn đề. Vui lòng gửi kết quả của các lệnh CLI sau: 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. sau đó thử mở localhost: 8080
Evgeniy Khyst

Xin vui lòng xem câu hỏi được cập nhật với nhật ký giao diện điều khiển. Tôi đã thử localhost:8080và nó lần ra. docker pschương trìnhCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604

@Evgeniy Khyst Tôi tìm thấy bài viết này nói về mạng docker . Nó nói rằng máy chủ chạy bên trong container phải lắng nghe tất cả các giao diện (phần cuối của bài viết), điều này có áp dụng không?
ps0604

Câu trả lời:


3

Theo mặc định, khi bạn tạo một thùng chứa, nó không xuất bản bất kỳ cổng nào của nó ra thế giới bên ngoài. Mạng 172,17.XX là nội bộ. Nếu bạn cần liên kết địa chỉ IP để lưu trữ ip, hãy chạy docker container với cờ -p, như thế:

-p 8080: 8080

Ánh xạ cổng TCP 8080 trong vùng chứa sang cổng 8080 trên máy chủ Docker


Tại sao ví dụ này hoạt động nếu các cổng không được công bố ra thế giới bên ngoài?
ps0604

@ Bạn sẽ chỉnh sửa câu trả lời không chính xác, nếu bạn xem câu hỏi đó chính xác là những gì tôi đang làm.
ps0604

@ ps0604 nghe có vẻ như có vấn đề về mạng. Trong trường hợp của bạn, hãy kiểm tra các quy tắc tường lửa
Ivan Vovk

Vì vậy, câu trả lời của bạn là không chính xác?
ps0604

Câu trả lời của tôi là chính xác, bởi vì nó dựa trên sự giới thiệu tài liệu.
Ivan Vovk

3

Từ: https://docs.docker.com/docker-for-windows/networking/

Chuyển tiếp cổng hoạt động cho localhost; --publish, -p hoặc -P đều hoạt động. Các cổng tiếp xúc từ Linux được chuyển tiếp đến máy chủ.

Vì vậy, nó có thể được truy cập từ http: // localhost: 8080


Nếu nó không hoạt động, hãy thử ví dụ về windows

docker run -d -p 80:80 --name webserver nginx

Nên truy cập http: // localhost: 80

https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples


Nếu thậm chí không thành công hãy thử:

docker-machine ip default

Và sử dụng http: // [docker-machine-ip]: 80


1
nó không hoạt động trong localhost: 8080, xin lỗi
ps0604

Bạn có thể thử ví dụ tôi đã đăng ở trên để xem nó có phải là vấn đề với jboss / wildfly hay không nếu đó là mạng windows của bạn?
Tyhal

Và nếu nginx không hoạt động thì bạn có thể chạy 'docker-machine ip default' và thử sử dụng IP ở đó thay vì localhost
Tyhal

0

Thông tin chính là Docker container in Windows 10 Pro- đây là thông số kỹ thuật rất chung về cách Docker trên Windows của bạn hoạt động. Có thể có nhiều tùy chọn, ví dụ như Docker for Windowscó / không có Linux containers, Docker toolboxví dụ từ xa, ....

Nói chung, các container Docker trên Windows đang chạy trong một số loại máy ảo (Hyper-V, Virtualbox, ...), thường. Vì vậy, có lớp mạng bổ sung, có thể không truy cập trực tiếp từ không gian tên mạng Windows của bạn. Nhưng ví dụ được liên kết chạy trên máy Linux, nơi lớp mạng bổ sung này không tồn tại. Và đó là lý do tại sao sao chép / dán ví dụ Linux không hoạt động trên Windows. Vì vậy, hãy chạy container như bình thường và để lộ cổng 8080:

docker run -it -p 8080:8080 jboss/wildfly

Nhưng IP để truy cập sẽ khác và IP container không thể được sử dụng, vì mạng docker bên trong rất có thể không truy cập được từ Windows. Thay vì cố gắng sử dụng IP của hệ điều hành Windows của bạn. Cuối cùng kiểm tra tài liệu về Docker on Windowsgiải pháp đã sử dụng và tìm IP nào được sử dụng cho các cổng tiếp xúc.

Nếu bạn có các kỹ năng kết nối mạng windows / linux, thì bằng cách nào đó bạn có thể định tuyến / chuyển tiếp cổng từ không gian tên mạng container, qua lớp mạng VM trung gian đến lớp mạng Windows. Nhưng nó có thể khá phức tạp.


Tháng 1, tôi đã cài đặt Docker Desktop cho Windows , tải xuống hình ảnh và chạy container Wildfly như được giải thích trong hướng dẫn ở trên. Trong bảng điều khiển tôi thấy rằng nó khởi động tốt, và 8080:8080đó là những gì trong lý thuyết nên hoạt động, nhưng nó không hoạt động. Tôi không biết về mạng, tôi nên bắt đầu tìm kiếm ở đâu?
ps0604

@ ps0604 Nếu bạn muốn theo dõi hướng dẫn Linux một cách mù quáng, thì hãy sử dụng Linux. Như tôi đã đề cập doc là bạn của bạn - docs.docker.com/docker-for-windows/networking có đề cập rõ ràng There is no docker0 bridge on Windows: Because of the way networking is implemented in Docker Desktop for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.. Hãy đối phó với giới hạn đó.
Jan Garaj

0

Tôi đã có một đồng nghiệp làm việc trên một hệ thống cửa sổ đối mặt với cùng một vấn đề. Anh ấy đã nỗ lực rất nhiều vào nó và không thể đi đến đâu được. Có rất nhiều thứ kỳ lạ xảy ra với Docker Desktop cho các cửa sổ. Cuối cùng chúng tôi chỉ cần cài đặt hệ thống con linux cho windows và cài đặt docker ở đó và nó hoạt động như một cơ duyên cho anh ấy từ đó trở đi. Nếu bạn muốn bám vào các cửa sổ và bạn không bận tâm đến hệ thống con linux, tôi khuyên bạn nên đi theo con đường đó. Chúng tôi đã đi xa hơn những gì Jan Garaj đề xuất và chỉ thấy nó là một sự lãng phí thời gian. Docker Desktop cho Windows có nghĩa là một env nơi bạn hoàn toàn làm việc trong đó - sử dụng các thùng chứa dev, v.v. Công cụ lưu trữ trên máy chủ là một nỗi đau với nó.


Vâng, tôi đồng ý, tôi sẽ tạo các container trong Ubuntu thay vì Windows, tôi không có vấn đề gì ở đó. Điều duy nhất là tôi phát triển trong Windows, vì vậy tôi sẽ phải kiểm tra ba lần, một lần trong các cửa sổ trong khi phát triển, sau đó trong thùng chứa linux và cuối cùng khi tôi tải container lên đám mây. Nếu tôi có thể chạy container trong Windows, thì tôi sẽ chỉ kiểm tra hai lần.
ps0604

đó là lý do tại sao tôi đề xuất hệ thống con linux .. bạn thực sự không phải thay đổi bối cảnh 3 lần ,, có thể 2-2,5 lần;)
Sam Thomas
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.