se connecter à la base mysql à partir de conteneurs docker
J'ai ce docker fichier et il fonctionne comme prévu. J'ai une application php qui se connecte à mysql sur localhost.
# cat Dockerfile
FROM tutum/lamp:latest
RUN rm -fr /app
ADD crm_220 /app/
ADD crmbox.sql /
ADD mysql-setup.sh /mysql-setup.sh
EXPOSE 80 3306
CMD ["/run.sh"]
Quand j'ai essayé d'exécuter la base de données en tant que récipient séparé, mon application php pointe toujours vers localhost. Lorsque je connecte le "web" conteneur, je ne suis pas en mesure de se connecter à "mysql1" conteneur.
# cat docker-compose.yml
web:
build: .
restart: always
volumes:
- .:/app/
ports:
- "8000:8000"
- "80:80"
links:
- mysql1:mysql
mysql1:
image: mysql:latest
volumes:
- "/var/lib/mysql:/var/lib/mysql"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: secretpass
Comment est-ce que mon application php de se connecter à mysql à partir d'un autre conteneur?
Ceci est similaire à la question posée ici...
Se connecter à mysql dans un conteneur docker à partir de l'hôte
Je ne veux pas se connecter à mysql à partir de la machine hôte, j'ai besoin de vous connecter à partir d'un autre récipient.
localhost
, c'est faux, il doit être mysql
.
OriginalL'auteur shantanuo | 2016-05-21
Vous devez vous connecter pour publier un commentaire.
Au premier abord, vous ne devriez pas vous exposer mysql port 3306 si vous ne voulez l'appeler à partir de la machine hôte. Au deuxième liens sont obsolètes maintenant. Vous pouvez utiliser le réseau à la place. Je ne pas sûr de composer v. 1, mais dans la v. 2 tous les conteneurs en commun docker-composer les fichiers sont dans un réseau (plus sur les réseaux) et peut être résolu par nom les uns des autres. Exemple de menu fixe-composer v. 2 fichier:
Avec une telle configuration, vous pouvez résoudre mysql conteneur par nom
mysql1
à l'intérieur du conteneur web.web
récipient, lorsque PHP essaie de se connecter aveclocalhost
, il "redirige" à lamysql1
conteneur automatiquement ?tous les appels à l'intérieur de
web
surlocalhost
sera l'adresse deweb
conteneur uniquement. Si vous voulez l'appelermysql1
conteneur, vous devez appelermysql1
hôteOriginalL'auteur Cortwave
Pour moi, les résolutions de nom n'est jamais passe. Voici mon menu fixe de fichier, et j'ai été en espérant pour vous connecter à partir de l'app de l'hôte mysql, où le nom est mysql et transmis comme un env variable à l'autre conteneur - DB_HOST=mysql
OriginalL'auteur Imran