Không có tuyến đường đến máy chủ trong container docker


8

Tôi đang chạy bộ chứa docker Debian trên máy Windows 10 cần truy cập một url cụ thể trên cổng 9000 ( 164.16.240.30:9000)

Máy chủ có thể truy cập tốt qua trình duyệt, tuy nhiên khi tôi đăng nhập vào thiết bị đầu cuối và chạy wget 172.17.240.30:9000tôi nhận được failed: No route to host.

Trong một nỗ lực để giải quyết điều này, tôi đã thêm:

ports:
  - 9000:9000

đến tệp docker-compose.yml, tuy nhiên điều đó dường như không có sự khác biệt nào.

Trong trường hợp bạn không thể đoán tôi là người mới này thì bạn sẽ thử gì tiếp theo?

Toàn bộ tập tin docker-compose.yml:

version: '3.4'

services:
  tokengeneratorapi:
    network_mode: host
    image: ${DOCKER_REGISTRY}tokengeneratorapi
    build:
      context: .
      dockerfile: TokenGeneratorApi/Dockerfile
    ports:
      - 5000:80
      - 9000
    environment:
      ASPNETCORE_ENVIRONMENT: local
      SSM_PATH: /ic/env1/tokengeneratorapi/
      AWS_ACCESS_KEY_ID: 
      AWS_SECRET_ACCESS_KEY: 

Lệnh tôi đang chạy:

docker-compose build --build-arg BRANCH=featuretest --build-arg CHANGE_ID=99 --build-arg CHANGE_TARGET=develop --build-arg SONAR_SERVER=164.16.240.30

Hãy thử mô phỏng trình duyệt qua wget, vì stackoverflow.com/questions/43182879/USE-wget-to-fake-browser Nó có thể là một tường lửa cắt kết nối. Đồng thời thử tắt ufw ( wiki.debian.org/Uncomplicated%20Firewall%20%28ufw%29 ): "dịch vụ sudo ufw stop" nếu nó được cài đặt và kích hoạt.
Jannes Botis

1
Container của bạn cần truy cập 164.16.240.30:9000, không chạy trên máy của bạn. Trình duyệt của bạn có quyền truy cập vào 164.16.240.30:9000tài nguyên này , nhưng container thì không. Tôi có đúng không Tại sao bạn đang cố gắng quên tài nguyên khác nhau 172.17.240.30:9000từ thiết bị đầu cuối và không 164.16.240.30:9000?
Jan Garaj

Hãy kiểm tra xem bạn không có bất kỳ mục proxy nào trong tệp ~ / .wgetrc của bạn.
Gautam

theo như tôi hiểu, tokengeneratorapi proxy yêu cầu một số sonar_server. Điều này có đúng không? Chúng tôi thậm chí có chắc chắn tokengeneratorapi chuyển tiếp đúng tới cổng 9000 không? Bước tiếp theo có thể là đăng nhập vào thùng chứa của bạn và nhắm mục tiêu với get hoặc cuộn máy chủ sonar: 9000. Và nếu ổn, hãy nhắm mục tiêu "ứng dụng" tokengeneratorapi của bạn như 127.0.0.1:9000 và đảm bảo chuyển tiếp đúng cách (vẫn trong thùng chứa)
grodzi

Vẫn chưa rõ về vấn đề của bạn, bạn đang nói rằng 'từ container bạn không thể truy cập 164.16.240.30:9000? Khi bạn nói I log in to the terminal and runlà bạn bên trong container? và tại sao bạn đang sử dụng IP khác nhau 172.17.240.30 vs 164.16.240.30
Vikrant Pawar

Câu trả lời:


1

Có vẻ như bộ chứa có vấn đề về kết nối nên giải pháp được đề xuất của bạn có thể không hoạt động, vì đó chỉ là ánh xạ một cổng máy chủ sang cổng container (xem xét URL mục tiêu của bạn không phải là máy chủ thực tế).

Hãy xem https://docs.docker.com/compose/compose-file/#network_mode và thử đặt nó thành máy chủ lưu trữ.


Đã thử điều này nhưng không có kết quả, vui lòng xem câu hỏi được cập nhật
m.edmondson

Để thêm vào điều này, có vẻ như 'máy chủ' không hoạt động trên máy chủ không phải linux docs.docker.com/network/network-tutorial-host
m.edmondson

Bắt tốt, tôi xin lỗi vì điều đó! Bạn có thể xác minh rằng nó không phải là một vấn đề tường lửa? Tường lửa cần cho phép các kết nối từ các container docker thông qua máy chủ.
agermain

Tôi không chắc chắn làm thế nào tôi sẽ làm điều đó vì máy chủ là windows 10. Ngoài ra, kết nối internet hoạt động chẳng hạn wget www.google.co.uktrả về 200. Có lẽ đây là một thứ linux, có lẽ iptables?
m.edmondson

Bạn có đứng sau một proxy công ty? Hãy thử docker network prune. Ngoài ra, hình ảnh dựa trên là gì?
agermain

1

Trình duyệt của bạn có quyền truy cập 164.16.240.30:9000, vì nó đang đi qua proxy (môi trường ủy thác điển hình), do đó, the proxycó kết nối mạng 164.16.240.30. Điều đó không có nghĩa là máy chủ của bạn cũng có cùng kết nối mạng. Trên thực tế, có vẻ như máy chủ của bạn không có cái đó. Đó là lý do tại sao wget trực tiếp từ container hoặc từ thiết bị đầu cuối có lỗi No route to host.

Tất cả mọi thứ phải thông qua proxy. Cố gắng định cấu hình proxy đúng cách - các ứng dụng linux http_proxy,https_proxythường sử dụng các biến môi trường , nhưng các ứng dụng có thể có tùy chọn riêng để định cấu hình proxy, cuối cùng bạn có thể định cấu hình nó ở cấp mã nguồn. Nó phụ thuộc vào ứng dụng / mã được sử dụng.


1

Tôi nghĩ vấn đề là bạn sử dụng chế độ máy chủ trong tập tin cấu hình docker của bạn và bạn có cho phép tường lửa IPTABLES cho các cổng trong máy debian không? Làm thế nào về cửa sổ?

network_mode: host 

mà thực sự bỏ qua cầu docker hoàn toàn để phần cổng bạn chỉ định không được áp dụng. Tất cả các cổng sẽ được mở trên hệ thống máy chủ. Bạn có thể kiểm tra với

nestat -tunlp | grep 5000

Và bạn sẽ thấy rằng cổng 5000 không được mở và được ánh xạ tới 80 của docker như bạn mong đợi. Tuy nhiên, các cổng 80 và 9000 phải được mở trên mạng debian nhưng không được liên kết với bất kỳ cầu nối docker nào với ip debian.

Từ đây: https://docs.docker.com/network/host/

CẢNH BÁO: Các cổng được xuất bản bị loại bỏ khi sử dụng chế độ mạng máy chủ

Vì một giải pháp có thể là loại bỏ dòng network_mode và nó sẽ hoạt động như mong đợi.


0

Mã của bạn không cho phép container của bạn truy cập 164.16.240.30:9000. Bạn nên đi 164.16.240.30:9000từ thiết bị đầu cuối thay vì 172.17.240.30:9000.

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.