Thử thay đổi 127.0.0.1:6379
thành redis:6379
.
Mặc dù Redis đang chạy, python
của bạn vùng chứa không thể giao tiếp với nó; điều này là do nó đang cố gắng kết nối với 127.0.0.1:6379
, nhưng từ quan điểm của container, không có gì chạy ở đó. Điều này có thể hơi bực bội khi gỡ lỗi, nhưng sẽ dễ dàng hơn một chút nếu bạn lưu ý rằng các vùng chứa có không gian tên mạng của riêng chúng. Do đó, python
của localhost! =redis
's localhost! =localhost
của máy chủ của bạn .
May mắn thay, thật dễ dàng để kết nối các vùng chứa đang chia sẻ cùng một cầu nối và theo mặc định, docker-compose
tạo một mạng cầu nối duy nhất và kết nối tất cả các vùng chứa của bạn với chúng, cung cấp DNS cần thiết để cho phép chúng khám phá lẫn nhau. Do đó, giao tiếp giữa vùng chứa với vùng chứa hoạt động đơn giản bằng cách sử dụng tên dịch vụ.
Lưu ý, có thể chạy các vùng chứa trong cùng một không gian tên và chạy trong chúng trong không gian tên của máy chủ lưu trữ, thông qua --net=container:<container-id>
hoặc --net=host
lá cờ. Điều này đặc biệt hữu ích để chạy các công cụ gỡ lỗi trong vùng chứa và gắn chúng vào không gian tên mạng của vùng chứa khác hoặc máy chủ lưu trữ, ví dụ:sử dụng netshoot để xem các cổng nào đang lắng nghe bên trong vùng chứa (được tiếp xúc hay không), docker run --rm -it --net container:test_web_1 nicolaka/netshoot netstat -tulpn
.