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?
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):
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
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)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05b3a3471f6f postgres "/docker-entrypoint.s" 1 seconds ago Up 1 seconds 0.0.0.0:5432->5432/tcp some-postgres
Masuk ke dalam wadah Anda dan buat database:
docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q
Pergi ke localhost Anda (di mana Anda memiliki beberapa alat atau klien psql).
psql -h public-ip-server -p 5432 -U postgres
(kata sandi mysecretpassword)
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
mytest | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
Jadi Anda mengakses basis data (yang berjalan di buruh pelabuhan pada server) dari hosting Anda.
Dalam postingan ini dikeluarkan secara rinci.
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
sudo
untuk menjalankan wadah Anda.
Anda juga dapat mengakses melalui perintah docker exec dengan:
$ docker exec -it postgres-container bash
# su postgres
$ psql
Atau
$ docker exec -it postgres-container psql -U postgres
su postgres
harus dilakukan
Saya 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:
# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres
# Create database
docker exec -it postgres-container createdb -U postgres my-db
-e POSTGRES_DB=my-db
untuk membuat my-db alih-alih postgres
Saya menggunakan Django dengan postgres di wadah Docker. dalam file pembuatan docker, tambahkan berikut ini:
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
**ports:
- "6543:5432"**
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.
Untuk terhubung dari localhost, Anda perlu menambahkan '--net host':
docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Anda dapat mengakses server secara langsung tanpa menggunakan exec dari localhost Anda, dengan menggunakan:
psql -h localhost -p 5432 -U postgres
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.
db:
image: postgres
ports:
- 5432:5432
restart: always
volumes:
- "db_sql:/var/lib/mysql"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres_db
Ini adalah pengalaman yang ingin saya bagikan. Mungkin seseorang dapat memanfaatkannya.
/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 denganpsql
perintah dengan cara berikut:
# CREATE DATABASE test;
# \c test
# CREATE TABLE test_table(something int);
# INSERT INTO test_table VALUES (123);
# SELECT * FROM test_table;
# \q
Langkah 7 : Buka aplikasi klien basis data sepertipgadmin
ataudbeaver
dan masukkan di bawah ini di bidang koneksi:
Host: localhost
Database: test
User: postgres
Password: password
Langkah 8 : Masukkan kueriselect * from test_table
di editor kueri dan Anda akan dapat melihat hasilnya123
Untuk beberapa alasan 5432 port tampaknya dilindungi. Saya mengubah konfigurasi port saya dari 5432:5432
menjadi 5416:5432
dan perintah berikut berfungsi untuk menghubungkan ke database postgres Anda dari luar wadah buruh pelabuhan :
psql -h localhost -p 5416 -U <my-user> -d <my-database>
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
docker exec -it <container_name>
maka Anda akan mendapatkan root - root@868594e88b53:/#
itu membutuhkan koneksi database
psql postgresql://<username>:<databasepassword>@postgres:5432/<database>
docker ps -a
untuk mendapatkan id kontainer, maka docker exec -it psql -U -W
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.