Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Docker tidak dapat menghubungkan aplikasi ke MySQL

docker-compose akan secara default membuat jaringan virtual jika semua wadah/layanan dalam file penulisan dapat saling menjangkau dengan alamat IP. Dengan menggunakan links , depends_on atau alias jaringan mereka dapat saling menjangkau dengan nama host. Dalam kasus Anda, nama host adalah nama layanan, tetapi ini dapat diganti. (lihat:dokumen )

Skrip Anda di my_common_package container/service kemudian harus terhubung ke mysql pada port 3306 sesuai dengan pengaturan Anda. (bukan localhost pada port 3306 )

Perhatikan juga bahwa menggunakan expose hanya diperlukan jika Dockerfile untuk layanan tidak memiliki EXPOSE penyataan. Gambar mysql standar sudah melakukan ini.

Jika Anda ingin memetakan port container ke localhost anda perlu menggunakan ports , tetapi lakukan ini hanya jika perlu.

services:
   mysql:
     image: mysql:5.6
     container_name: test_mysql_container
     environment:
       - MYSQL_ROOT_PASSWORD=test
       - MYSQL_DATABASE=My_Database
       - MYSQL_USER=my_user
       - MYSQL_PASSWORD=my_password
     volumes:
       - db_data:/var/lib/mysql
     ports:
       - "3306:3306"

Di sini kita mengatakan bahwa port 3306 dalam wadah mysql harus dipetakan ke localhost pada port 3306.

Sekarang Anda dapat terhubung ke mysql menggunakan localhost:3306 di luar buruh pelabuhan. Misalnya Anda dapat mencoba menjalankan testsql.py secara lokal (TIDAK dalam wadah).

Komunikasi container ke container akan selalu terjadi dengan menggunakan nama host dari masing-masing container. Pikirkan container sebagai mesin virtual.

Anda bahkan dapat menemukan komposisi buruh pelabuhan yang dibuat menggunakan docker network list :

1b1a54630639        myproject_default             bridge              local
82498fd930bb        bridge                        bridge              local

.. lalu gunakan docker network inspect <id> untuk melihat detailnya.

Alamat IP yang ditetapkan ke container bisa sangat acak, jadi satu-satunya cara yang layak untuk komunikasi container ke container adalah menggunakan nama host.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:memilih baris di mana kolomnya nol

  2. Apakah aman menyimpan tanggal sebagai string di mysql?

  3. Cara Membuat Tabel Pivot Dinamis di MySQL

  4. Pilih 10 baris pertama yang berbeda di mysql

  5. Menggabungkan catatan dalam satu kolom tanpa pengulangan?