Saya memiliki Postgresql di server dalam wadah buruh pelabuhan. Bagaimana saya bisa terhubung dari luar, yaitu dari komputer lokal saya? Pengaturan apa yang harus saya terapkan untuk memungkinkan itu?
197
Saya memiliki Postgresql di server dalam wadah buruh pelabuhan. Bagaimana saya bisa terhubung dari luar, yaitu dari komputer lokal saya? Pengaturan apa yang harus saya terapkan untuk memungkinkan itu?
Jawaban:
Anda dapat menjalankan Postgres dengan cara ini (memetakan porta):
Jadi sekarang Anda telah memetakan port 5432 wadah Anda ke port 5432 server Anda.
-p <host_port>:<container_port>
Jadi sekarang postgres Anda dapat diakses dari Andapublic-server-ip:5432
Untuk menguji: Jalankan database postgres (perintah di atas)
Masuk ke dalam wadah Anda dan buat database:
Pergi ke localhost Anda (di mana Anda memiliki beberapa alat atau klien psql).
(kata sandi mysecretpassword)
Jadi Anda mengakses basis data (yang berjalan di buruh pelabuhan pada server) dari hosting Anda.
Dalam postingan ini dikeluarkan secara rinci.
sumber
ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1
docker run --net=host --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Saya berhasil menjalankannya di linux
Jalankan poster docker - pastikan portnya dipublikasikan, saya menggunakan alpine karena ringan.
sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
menggunakan terminal lain, akses database dari host menggunakan postgres uri
psql postgresql://postgres:1234@localhost:5432/postgres
untuk pengguna mac, ganti psql dengan pgcli
sumber
sudo
untuk menjalankan wadah Anda.Anda juga dapat mengakses melalui perintah docker exec dengan:
Atau
sumber
su postgres
harus dilakukanSaya sudah menjalankan postgres di mesin host dan tidak ingin mengizinkan koneksi dari jaringan, jadi saya menjalankan instance postgres sementara dalam wadah dan membuat database hanya dalam dua baris:
sumber
-e POSTGRES_DB=my-db
untuk membuat my-db alih-alih postgresSaya menggunakan Django dengan postgres di wadah Docker. dalam file pembuatan docker, tambahkan berikut ini:
yang akan menambah port yang dapat diakses oleh mesin lokal Anda. untuk diri saya sendiri, saya menghubungkan DBeaver ke sana. ini akan mencegah bentrokan port antara permintaan aplikasi Anda dan permintaan mesin lokal. pada awalnya, saya mendapat pesan yang mengatakan bahwa port 5432 sedang digunakan (yang oleh aplikasi Django) jadi saya tidak bisa mengakses dengan pgAdmin atau DBeaver.
sumber
Untuk terhubung dari localhost, Anda perlu menambahkan '--net host':
Anda dapat mengakses server secara langsung tanpa menggunakan exec dari localhost Anda, dengan menggunakan:
sumber
Saya mencoba menghubungkan dari localhost (mac) ke wadah postgres. Saya mengubah port di file docker-compose dari 5432 menjadi 3306 dan memulai wadah. Tidak tahu mengapa saya melakukannya: |
Kemudian saya mencoba terhubung ke postgres via PSequel dan adminer dan koneksi tidak dapat dibangun.
Setelah beralih kembali ke port 5432 semua berfungsi dengan baik.
Ini adalah pengalaman yang ingin saya bagikan. Mungkin seseorang dapat memanfaatkannya.
sumber
/var/lib/mysql
?Saya berasumsi bahwa Anda ingin dapat melihat data yang ada di wadah Anda setiap kali Anda terhubung dari luar. Untuk melakukan ini, Anda harus bertahan data pada gambar postgres.
Jika Anda tidak memiliki data tahan, Anda harus mengulang semua yang Anda lakukan pertama kali.
Langkah 3, 5, 6, 7, dan 8 menjawab pertanyaan Anda secara langsung.
Berikut ini adalah ikhtisar terperinci dari seluruh proses yang saya ikuti pada Windows 10 PowerShell (perintahnya juga sama di Linux dan MacOS):
Langkah 1 : Mulai PowerShell dalam mode non-admin
Langkah 2 : Unduh gambar postgres docker:
docker pull postgres:latest
Langkah 3 : Mulai wadah buruh pelabuhan dalam mode terpisah dan tahan data pada gambar postgres dengan membuat volume dan mengikatnya ke tujuan
( Catatan : secara default 5432 adalah port default yang digunakan; tetapi nyatakan secara eksplisit untuk mencegah kesalahan koneksi dari klien seperti pgadmin, dbeaver, dll.)
docker run --name postgres-test -e POSTGRES_PASSWORD=password -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:latest
Langkah 4 : Periksa status wadah yang berjalan
docker ps -a
Langkah 5 : Masuk ke dalam container_name dalam mode interaktif
( Catatan : perintah seperti ls, pwd, dll. Dapat dieksekusi di sini jika Anda telah memeriksa wadah linux selama instalasi)
docker exec -it postgres-test psql -U postgres
Langkah 6 : Buat data sampel. Pada titik ini, Anda dapat bermain dengan
psql
perintah dengan cara berikut:Langkah 7 : Buka aplikasi klien basis data seperti
pgadmin
ataudbeaver
dan masukkan di bawah ini di bidang koneksi:Langkah 8 : Masukkan kueri
select * from test_table
di editor kueri dan Anda akan dapat melihat hasilnya123
sumber
Untuk beberapa alasan 5432 port tampaknya dilindungi. Saya mengubah konfigurasi port saya dari
5432:5432
menjadi5416:5432
dan perintah berikut berfungsi untuk menghubungkan ke database postgres Anda dari luar wadah buruh pelabuhan :sumber
postgres
layanan di mesin host Anda yang sudah akan mengikat ke localhost: 5432 mencegah Anda menggunakannya. Memetakan port host yang berbeda ke port default 5432 di dalam container adalah solusi yang bagus untuk itu; atau Anda dapat menghentikan layanan postgres pada host Anda, tetapi mungkin itu digunakan untuk sesuatu yang Anda butuhkan.pertama buka gambar buruh pelabuhan untuk postgres
maka Anda akan mendapatkan root -
root@868594e88b53:/#
itu membutuhkan koneksi databasesumber
Dalam hal ini adalah aplikasi backend Django, Anda dapat melakukan sesuatu seperti ini.
sumber
Ada jawaban yang baik di sini tetapi Jika Anda ingin memiliki antarmuka untuk manajemen basis data postgres, Anda dapat menginstal pgAdmin di komputer lokal Anda dan terhubung ke mesin jarak jauh menggunakan IP-nya dan port postposposed port (secara default 5432).
sumber
docker ps -a
untuk mendapatkan id kontainer, maka docker exec -it psql -U -Wsumber
Saya tahu ini terlambat, jika Anda menggunakan docker-compose seperti @Martin
Ini adalah cuplikan yang membantu saya terhubung ke psql di dalam wadah
docker-compose run db bash
root@de96f9358b70:/# psql -h db -U root -d postgres_db
Saya tidak dapat berkomentar karena saya tidak memiliki 50 reputasi. Jadi harap ini membantu.
sumber