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] ...