Jika saya memiliki database mysql yang berjalan di beberapa mesin host, dan host itu juga menjalankan wadah buruh pelabuhan: Bagaimana saya mengakses database mysql dari dalam wadah buruh pelabuhan yang berjalan di host ?.
Misalnya, apakah ada cara untuk mempublikasikan port host ke kontainer (kebalikan dari apa yang dilakukan docker run -p)?
Jawaban:
Ada beberapa diskusi lama tentang bagaimana melakukan ini secara konsisten, dipahami dengan baik dan portabel. Tidak ada resolusi lengkap tetapi saya akan menautkan Anda ke diskusi di bawah ini.
Bagaimanapun Anda ingin mencoba menggunakan opsi --add-host untuk menjalankan docker untuk menambahkan alamat ip host ke dalam file / etc / host yang mengandung. Dari sana mudah untuk terhubung ke host pada port yang diperlukan:
Dokumentasi:
https://docs.docker.com/engine/reference/commandline/run/
Diskusi tentang mengakses host dari wadah:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023
sumber
Dari 18,03 dokumen:
CONTOH: Inilah yang saya gunakan untuk string koneksi MySQL saya di dalam wadah saya untuk mengakses instance MySQL di host saya:
sumber
Dari Docker 17.06 dan seterusnya, nama DNS khusus Mac hanya tersedia dalam wadah buruh pelabuhan yang memutuskan ke alamat IP host. Ini:
docker.for.mac.localhost
Dokumentasi di sini: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
sumber
docker.for.mac.host.internal
mulai dari sekarangDocker 17.12.0 ce
. docs.docker.com/docker-for-mac/release-notes/…docker.for.mac.localhost
bekerja pada18.03.1-ce-mac65
Gunakan host.docker.internal dari Docker 18.03 dan seterusnya.
sumber
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
Jawaban lain tidak berhasil untuk saya. Kontainer saya tidak dapat menyelesaikan ip host menggunakan host.docker.internal . Ada dua cara
Berbagi jaringan host --net = host:
Menggunakan alamat ip docker, yang biasanya 172.17.0.1 . Anda dapat memeriksanya dengan memanggil perintah ifconfig dan mengambil antarmuka inet dari docker
Setelah Anda memiliki alamat ip ini, Anda dapat meneruskannya sebagai argumen untuk menjalankan docker dan kemudian ke aplikasi atau seperti yang saya lakukan, memetakan lokasi jdbc.properties melalui volume ke direktori pada mesin host, sehingga Anda dapat mengelola file secara eksternal .
CATATAN: Basis data Anda mungkin tidak mengizinkan koneksi eksternal. Dalam hal postgresql, Anda perlu mengedit 2 file, seperti yang dijelaskan di sini dan di sini :
Edit postgresql.conf untuk mendengarkan semua alamat. Secara default akan menunjuk ke localhost.
Edit pg_hba.conf untuk mengizinkan koneksi dari semua alamat. Tambahkan pada baris terakhir:
PENTING: Langkah terakhir memperbarui akses basis data tidak disarankan untuk penggunaan produksi kecuali Anda benar-benar yakin dengan apa yang Anda lakukan.
sumber