Saya mencoba untuk memahami alasan sebenarnya untuk pemasangan docker.sock
di docker-compose.yml
berkas. Apakah ini untuk penemuan otomatis?
volumes:
- /var/run/docker.sock:/var/run/docker.sock
docker.sock
adalah soket UNIX yang didengarkan daemon Docker. Ini adalah titik masuk utama untuk API Docker. Ini juga bisa berupa soket TCP tetapi secara default untuk alasan keamanan Docker default untuk menggunakan soket UNIX.
Klien cli Docker menggunakan socket ini untuk menjalankan perintah docker secara default. Anda dapat mengganti pengaturan ini juga.
Mungkin ada alasan berbeda mengapa Anda mungkin perlu memasang soket Docker di dalam sebuah wadah. Seperti meluncurkan wadah baru dari dalam wadah lain. Atau untuk penemuan layanan otomatis dan tujuan Logging. Ini meningkatkan serangan permukaan sehingga Anda harus berhati-hati jika Anda memasang socket buruh pelabuhan di dalam wadah ada kode tepercaya berjalan di dalam wadah itu jika tidak, Anda dapat dengan mudah kompromi host Anda yang menjalankan daemon docker, karena Docker secara default meluncurkan semua wadah sebagai root.
Soket docker memiliki grup docker di sebagian besar instalasi sehingga pengguna dalam grup tersebut dapat menjalankan perintah docker terhadap socket docker tanpa izin root tetapi kontainer buruh pelabuhan yang sebenarnya masih mendapatkan izin root karena daemon docker berjalan sebagai root secara efektif (perlu izin root untuk mengakses namespace dan cgroups) .
Saya harap ini menjawab pertanyaan Anda.
Info lebih lanjut: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
di dalam wadah adalah praktik umum, namun sangat berbahaya. Penyerang dapat menjalankan perintah apa pun yang dapat dijalankan layanan buruh pelabuhan, yang umumnya menyediakan akses ke seluruh sistem host karena layanan buruh pelabuhan berjalan sebagai root. "Saya tahu ini agak terlambat tetapi saya berharap jawaban saya akan memberikan begitu banyak wawasan
Istilah Soket biasanya mengacu pada Soket IP. Ini adalah orang-orang yang terikat pada port (dan alamat), kami mengirim permintaan TCP, dan mendapat tanggapan dari.
Jenis lain dari Socket adalah Unix Socket, soket ini digunakan untuk IPC (Interprocess Communication). Mereka juga disebut Unix Domain Sockets ( UDS ). Unix Sockets menggunakan sistem file lokal untuk komunikasi, sedangkan IP Sockets menggunakan jaringan.
The Docker daemon dapat mendengarkan permintaan API Docker Mesin melalui tiga jenis Socket:
unix, tcp, and fd
.Secara default, soket domain unix (atau soket IPC) dibuat di /var/run/docker.sock
Mari kita lihat beberapa contoh langsung :
Docker Server menggunakan soket ini untuk mendengarkan REST API, dan klien menggunakan soket untuk mengirim permintaan API ke server.
Beberapa perintah :
lihat artikel yang indah ini
sumber
pada dasarnya memperlihatkan daemon buruh pelabuhan tuan rumah ke wadah. sehingga Anda dapat memohon api / klien buruh pelabuhan dari wadah Anda, untuk memulai / menghentikan / membuat gambar / wadah seperti secara langsung memanggil perintah-perintah itu di host.
sumber