yêu cầu curl để IPv6 localhost bị kẹt


9

Một container docker của tôi hiển thị giao diện HTTP trên cổng 8500, được ánh xạ tới cổng máy chủ 8500. Nó không được bật IPv6. Điều này vẫn có nghĩa, tôi sẽ có thể truy cập nó tại localhost: 8500. IPv6 được ưa thích, vì vậy tôi kết thúc với một yêu cầu tới [:: 1]: 8500. Cái này bị kẹt, nó không bao giờ trở lại.

Tái tạo điều này với curl, lệnh này bị kẹt:

curl -g -6 "http://[::1]:8500"

Tùy chọn --verbose của curl cho thấy không có gì, cũng không --ascii-dấu vết. Đồng thời, một yêu cầu tới localhost của IPv4 thành công:

curl http://127.0.0.1:8500

cho tôi HTML mong đợi. Nếu tôi chạy máy chủ HTTP IPv4 trên loopback, sử dụng

python -m SimpleHTTPServer 4001

sau đó tôi nhận được rất nhiều HTML cho localhost của IPv4

curl http://127.1:4001

và lỗi kết nối thích hợp cho IPv6:

curl -g -6 "http://[::1]:4001"
curl: (7) Failed to connect to ::1 port 4001: Connection refused

Những điều cần lưu ý: Docker 1.7.1. IPv6 không được kích hoạt cho bộ chứa, do đó không có quy tắc iptable IPv6. (ip6tables -v -L không cho gì cả)

Câu hỏi của tôi là: Tại sao yêu cầu bị mắc kẹt, và làm gì?


1
Bạn có thể cho chúng tôi thấy đầu ra của "netstat -6 -an" không?
Rui F Ribeiro

Đúng, docker đang lắng nghe trên cổng đó: tcp6 0 0 :::8500 :::* LISTEN 1648/docker Hấp dẫn. Tại sao? Và tại sao nó lại chặn?
mknecht

Nghe và không được cấu hình, hoặc IPv6 bị vô hiệu hóa trong sysctl, tôi đoán vậy. nginx, apache, lighthttp, bạn sẽ nối thêm máy chủ web vào câu hỏi, xin vui lòng?
Rui F Ribeiro

Bên trong container, Consul, một kho lưu trữ khóa-giá trị cho cấu hình, đang lắng nghe. Nhưng tôi không nghĩ nó có liên quan: container không được kích hoạt IPv6. Yêu cầu đó không bao giờ đạt được Lãnh sự. Mặc dù vậy, tôi không nhận được lớp nào bị kẹt. Trên máy chủ, /proc/sys/net/ipv6/conf/all/disable_ipv6mang lại 0, vì vậy IPv6 phải được bật.
mknecht

2
Điều đó không có nghĩa nhiều. Bạn có thể tắt IPv6 ngay cả trong sysctl và trong các nhân mới hơn, miễn là chương trình liên kết với ổ cắm IPv6, yêu cầu được thực hiện. Thật khó chịu, vì bạn phải trải qua từng daemon hỗ trợ IPv6 và vô hiệu hóa cấu hình IPv6.
Rui F Ribeiro

Câu trả lời:


0

Kích hoạt ipv6 và chuyển tiếp ebable.

# cat /etc/sysctl.conf | grep ipv6
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0

1
Rõ ràng, OP không cố gắng làm cho một cái gì đó hoạt động; câu hỏi thực tế là "Tại sao yêu cầu bị kẹt, và làm gì?". Có câu trả lời của bạn cung cấp một lời giải thích cho điều đó? Nếu vậy, bạn có thể vui lòng làm rõ như thế nào?
fra-san
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.