Tại sao tôi KHÔNG thể kết nối với localhost:5432?
Tạo mã /etc/hosts cho vùng chứa của bạn
$ sudo docker exec -it [container] cat /etc/hosts
Đối với mạng docker là bridge theo mặc định, localhost bên trong trỏ đến chính vùng chứa ( Mạng cầu nối mặc định của Docker
). Sau đó, bạn không có 5432 đang nghe trong vùng chứa của bạn:
$ sudo docker exec [container] nc -v -z localhost 5432
Giải pháp 1. Nếu bạn muốn mã hóa cứng "localhost:5432" bên trong xml cấu hình của mình, cách dễ nhất là tạo vùng chứa của bạn với tùy chọn "--net =host":
$ sudo docker run --net=host -it ...
Giải pháp 2. Thay đổi
localhost của ip máy chủ docker của bạn bên trong vùng chứa - Nhận ip máy chủ docker của bạn :
$ sudo docker inspect -f '{{ .NetworkSettings.Gateway }}' 192.168.5.1 - Nhập vùng chứa của bạn:
$ sudo docker exec -it [container] /bin/bash - Chỉnh sửa tệp
/etc/hostsđể trỏ máy chủ cục bộ tới ip máy chủ docker :$ sudo vim /etc/hosts 192.168.5.1 localhost
Giải pháp 3. Sửa đổi tệp cấu hình db của bạn để sử dụng bí danh thay vì localhost :
connectionURL="jdbc:postgresql://DB_ALIAS/admin?stringtype=unspecified" Sau đó, thêm DB_ALIAS vào máy chủ của vùng chứa:$ sudo docker run --add-host DB_ALIAS:192.168.5.1 -it [image] ...