Om een container externe toegankelijk te maken moeten we de poorten voor toegang regelen met Docker. Met de -p
optie kunnen we aangeven via welke poort de app beschikbaar wordt.
Laten we eerst kijken nu onze container voor intern gebruik draait of er al poorten open staan, want de standaard poort voor MySQL is 3306.
Met de standaard app in Linux ss (socket state) (vervanger voor netstat) kunnen we controleren of er geen poorten open staan voor deze container.
ss -altnp | grep 3306
Je ziet dat er geen uitvoer komt, daarmee concluderen we dat er nu geen applicaties draaien op poort 3306.
Laten we de container starten.
docker run --name mariadbdemoport -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mariadb
Je ziet dat de opdracht bijna identiek is aan de lokale MySQL container, maar dat er nu met -p
wordt aangegeven welke poort en op de host met welke poort in de container verbonden wordt.
Controleren of de container draait.
docker ps
Je ziet nu 2 containers, waarvan 1 een poort op de host open heeft staan.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c62de11d3907 mariadb "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mariadbdemoport
2e11bc5dcba4 mariadb "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 3306/tcp mariadbdemo
Laten we nu eerst met ss controleren of er inderdaad een poort open staat op de host.
ss -altnp | grep 3306
Vanaf nu is de container extern beschikbaar en kan er verbinding mee gemaakt worden.
Als 3306 is toegevoegd aan UFW, dan kan er remote met de volgende opdracht verbinding worden gemaakt.
mysql -u root -p -h 192.168.182.128