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.