Ich hatte heute gleich zwei Probleme mit einer Docker-Installation.
Das erste bestand darin, eine 'docker-compose.yml' überschreiben zu müssen, ohne das Original zu verändern. Dafür bietet Docker Overrides an, aber das wollte zuerst nicht so wie von mir angenommen (ich habe die passende Dokumentation erst recht spät gefunden).
Das zweite bestand darin, einen von Docker geöffneten Port an Localhost zu binden, damit er nicht von außen erreichbar ist. Docker umgeht nämlich die unter Ubuntu oft verwendete Firewall UFW, was ein ziemliches Sicherheitsproblem darstellt.
In der ursprünglichen 'docker-compose.yml' steht:
Services:
[...]
example:
ports:
- "3000:3000"
[...]
[...]
Ich muss aber den externen Port von 3000 auf 3600 ändern (da Port 3000 bereits anderweitig belegt ist) und außerdem an Localhost binden. Aber ich darf die Originaldatei nicht verändern, weil sie bei Updates überschrieben wird. Damit würden die von mir vorgenommenen Änderungen verloren gehen.
Für diesen Zweck können die Overrides von Docker verwendet werden.
Dazu schreibe ich in 'docker-compose.override.yml':
Services:
example:
ports: !override
- "127.0.0.1:3600:3000"
Ohne das '!override' (das mir zuerst nicht bekannt war) wären beide Anweisungen aktiv, sprich:
Services:
example:
ports:
- "3000:3000"
- "127.0.0.1:3600:3000"
Das ist natürlich nicht erwünscht. Die Anweisung '!override' sorgt dafür, dass die ursprüngliche Anweisung deaktiviert wird und nur die neue Anweisung aktiv ist.
Und das '127.0.0.1:3600:3000' bindet den Port 3600 an Localhost, sodass er keinesfalls von außen erreichbar ist (das übernimmt in meinem Fall nginx als Reverse Proxy, der den Zugang von außen SSL-verschlüsselt via Port 443 öffnet).