web-dev-qa-db-fra.com

Comment se connecter au conteneur mysql de docker sur une machine distante

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:

  • 1.mysql-client, mysql-server ou mysql sur la machine IP2
  • 2.et je n'ai défini nulle part où se connecter à 0.0.0.0 car je veux me connecter directement au conteneur mysql. Je dois probablement le définirpour se lier à 0.0.0.0 dans ce conteneur.

Résultat pour le pare-feu 

Sudo netstat -tunlp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      24717/docker-proxy
10
makkasi

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.

2
Webvoid

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 .

1
Alex Karshin