Yanıtlar:
docker.sock
Docker daemon'un dinlediği UNIX soketidir. Docker API için ana giriş noktasıdır. Ayrıca TCP soketi de olabilir, ancak varsayılan olarak güvenlik nedenleriyle Docker varsayılan olarak UNIX soketini kullanır.
Docker cli istemcisi, varsayılan olarak docker komutlarını yürütmek için bu soketi kullanır. Bu ayarları da geçersiz kılabilirsiniz.
Docker soketini bir konteynerin içine monte etmeniz gerekmesinin farklı nedenleri olabilir. Başka bir konteynerden yeni konteynerler başlatmak gibi. Veya otomatik servis keşfi ve Günlük kaydı amaçları için. Bu, saldırı yüzeyini artırır, bu nedenle bir konteynerin içine docker soketi takarsanız dikkatli olmalısınız, aksi takdirde Docker varsayılan olarak tüm konteynerleri root olarak başlattığından, docker daemon çalıştıran ana makinenizi tehlikeye atabilirsiniz.
Docker soketinin çoğu kurulumda bir docker grubu vardır, bu nedenle bu gruptaki kullanıcılar docker komutlarını kök izni olmadan docker soketine karşı çalıştırabilir, ancak docker daemon'u root olarak etkili bir şekilde çalıştığından (ad alanına ve cgroups'a erişmek için root iznine ihtiyaç duyduğu için gerçek docker konteynerleri hala root izni alır) .
Umarım sorunuzu cevaplar.
Daha fazla bilgi: https://docs.docker.com/engine/reference/commandline/dockerd/#examples
/var/run/docker.sock
Konteynerin içine monte etmek yaygın, ancak çok tehlikeli bir uygulamadır. Bir saldırgan, docker servisinin çalıştırabileceği herhangi bir komutu çalıştırabilir, bu da genellikle docker servisi root olarak çalıştığı için tüm ana sisteme erişim sağlar. "
Biraz geç biliyorum ama umarım cevabım çok fazla fikir verir
Önce Unix Sockets hakkında konuşmama izin verin
Soketler terimi genellikle IP Soketleri anlamına gelir. Bunlar bir bağlantı noktasına (ve adrese) bağlı olanlardır, TCP isteklerini gönderiyoruz ve yanıtları alıyoruz.
Başka bir Soket türü de Unix Soketidir, bu soketler IPC (İşlemler Arası İletişim) için kullanılır . Ayrıca Unix Domain Sockets ( UDS ) olarak da adlandırılırlar . Unix Soketleri iletişim için yerel dosya sistemini kullanırken IP Soketleri ağı kullanır.
Docker daemon, Docker Engine API isteklerini üç farklı Soket türü aracılığıyla dinleyebilir: unix, tcp, and fd
.
Varsayılan olarak, /var/run/docker.sock adresinde bir unix etki alanı soketi (veya IPC soketi) oluşturulur.
Bazı canlı örnekler görelim :
Docker Server, REST API'yi dinlemek için bu soketi kullanır ve istemciler, sunucuya API istekleri göndermek için soketi kullanır.
curl ,
--unix-socket
bayrak aracılığıyla bir Unix Soketi ile konuşabilir . Docker Server API REST olarak sunulduğundan, HTTP üzerinden komutlar göndermemiz gerekir. Ayrıca, bu sunucu yerel olduğundan (dosya sistemini hatırlayın), URL'deki herhangi bir ana bilgisayar adını iletebiliriz (veya yerel ana makineye yapıştırabiliriz, bu da iyi çalışacaktır!). Sunucu, ana bilgisayar adı ile değil, sadece yol ile ilgilenir.
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
}
]
Bazı komutlar :
Docker.sock ile pek çok şey yapabilirsiniz