J'ai deux machines. Ma machine avec IP1(Europe)
et une autre machine avec IP2(USA)
publique. Sur IP2
, le conteneur mysql s'exécute avec le volume /var/lib/mysql
sur le point d'être répliqué dans un dossier sur l'ordinateur hôte ~/mysqldatabase
. La règle de pare-feu pour le port 3306
est ajoutée. De plus, j'ai une connexion SSH à la machine. Donc, je ne sais pas par où commencer. D'habitude quand il n'y a pas de docker j'ajoute juste
bind-address = 0.0.0.0
comme configuration dans mysql et j'ouvre le port de pare-feu 3306
(ou un autre qui pointe vers mysql) et tout fonctionne normalement .. donc je peux probablement installer le paquet mysql-server (l'hôte est ubuntu16.04) en dehors de docker la machine IP2 et de le configurer pour qu'il pointe vers le dossier ~/mysqldatabase
, mais est-il vraiment nécessaire de le faire? Est-il possible de se connecter directement de IP1
à IP2:mysql_container:mysql_database
Je lance le conteneur mysql docker de deux manières. On est avec le fichier docker. Et l'autre est avec le service systemctl.
Une partie de docker-compose.yml:
version: "3"
services:
mysql:
image: mysql:5.7
volumes:
- /home/username/mysqldatabase:/var/lib/mysql
ports:
- '3306:3306'
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: somedb
MYSQL_USER: someuser
MYSQL_PASSWORD: someuserpassword
mysql.service
[Unit]
Description=Run %p
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm -f %p
docker run --rm --name mysql -v /home/username/mysqldatabase:/var/lib/mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=rootpass -e MYSQL_DATABASE=somedb -e MYSQL_USER=someuser -e MYSQL_PASSWORD=someuserpassword \
mysql:5.7
ExecStop=/usr/bin/docker stop %p
[Install]
WantedBy=multi-user.target
Pour simplifier les choses, disons que je n’utilise que la deuxième approche.
Je n'ai pas:
Résultat pour le pare-feu
Sudo netstat -tunlp | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 24717/docker-proxy
Je pense que votre conteneur mysql écoute sur ipv6 (voir le résultat de votre netstat). En cause peut être votre configuration de menu fixe. Je ne sais pas comment le résoudre. Personnellement, je désactive simplement ipv6 sur mes hôtes de menu fixe pour éviter ce problème.
J'espère que ça aide.
Vous ne précisez pas comment vous utilisez votre conteneur mysql ...
Vous devez spécifier quel port doit être "publié", c’est-à-dire quel port doit passer de "extérieur" à "intérieur" de votre conteneur mysql.
Pour ce faire, vous pouvez soit spécifier une option -p
lorsque vous effectuez docker run
, soit l'ajouter à votre docker-compose.yml
.
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:tag
ou docker-compose.yml
version: '3.1'
services:
db:
image: mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: example
En savoir plus sur les ports de publication ici .