Jawaban:
docker.sockadalah 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.sockdi 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
Biarkan saya bicara lebih dulu tentang Unix Sockets
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.
curl dapat berbicara dengan Unix Socket melalui
--unix-socketflag. Karena Docker Server API diekspos sebagai REST, kami harus mengirim perintah melalui HTTP. Juga, karena server ini bersifat lokal (ingat, sistem file), kami dapat memberikan nama host apa saja di URL (atau menempel pada localhost, itu juga akan berfungsi dengan baik!). Server tidak peduli dengan nama host, hanya jalannya.
curl --unix-socket /var/run/docker.sock http://localhost/images/json | jq
[
{
"Containers": -1,
"Created": 1525888860,
"Id": "sha256:24a77bfbb9ee3aeef9e24766ad6e9fa57f85c67596f154e8916e4f314067e149",
"Labels": null,
"ParentId": "",
"RepoDigests": [
"postgres@sha256:b06cdddba62f1550a1c674270814e72eaa8734d95912019b4ddc288b650ad67d"
],
"RepoTags": null,
"SharedSize": -1,
"Size": 39507096,
"VirtualSize": 39507096
}
]
Beberapa perintah :
Anda dapat melakukan banyak hal dengan docker.sock
lihat artikel yang indah ini