Лесно е да направите услуга, хоствана от Docker, достъпна само за други контейнери на същия хост. Ако вие:
- Настройте сървъра да се свързва или слуша на 0.0.0.0 или ::0 (всички адреси);
- Създайте мрежа на Docker, която не е по подразбиране (Docker Compose ще направи това автоматично);
- Стартирайте сървърния контейнер и всички свързани клиентски контейнери в тази Docker мрежа (Docker Compose ще направи това по подразбиране); и
- Не задайте
docker run -p
или Docker Composeports:
опция
тогава контейнерите на клиента могат да достигнат до сървърния контейнер, използвайки името на контейнера му като име на хост, но процесите, които не са Docker на хоста и другите хостове, не могат да достигнат до сървъра.
Ако вашият хост има множество мрежови интерфейси и свързването към един от тях би направило услугата „частна“, тогава можете да направите същото с docker run -p
. Ако вашият хост има публичен IP адрес 10.20.30.40/16 и частен IP адрес 192.168.144.128/24, тогава docker run -p 192.168.144.128:6379:6379
ще го направи достъпен за частната мрежа (и други Docker контейнери, както по-горе), но не и за публичната мрежа. (Самият сървър, вътре в контейнера, все още трябва да се свърже с 0.0.0.0.)
Ако иначе трябва сървърът да бъде видим извън хоста, но само за някои IP адреси, мисля, че сте до iptables
магия, която не е родна за Docker.