2016-05-21 13 views
2

Ich habe diese Docker-Datei und es funktioniert wie erwartet. Ich habe PHP-Anwendung, die mit mysql auf localhost verbindet.Verbindung zum mysql-Datenbank von Docker-Container

# 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"] 

Wenn ich versuchte, die Datenbank als separaten Container auszuführen, zeigt meine php-Anwendung immer noch auf localhost. Wenn ich eine Verbindung zum Container "web" herstelle, kann ich keine Verbindung zum Container "mysql1" herstellen.

# 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 

Wie verbindet sich meine PHP-Anwendung mit mysql aus einem anderen Container?

Dies ist ähnlich wie die Frage hier gefragt ...

Connect to mysql in a docker container from the host

Ich will nicht zu MySQL von Host-Rechner verbinden, muß ich von einem anderen Behälter verbinden.

+1

Wie sieht Ihre mysql-Verbindungskonfiguration aus? Wenn der Host auf "localhost" zeigt, ist das falsch, es sollte "mysql" sein. –

Antwort

2

Zuerst sollten Sie den mysql 3306-Port nicht verfügbar machen, wenn Sie ihn nicht vom Hostcomputer aus aufrufen möchten. Bei zweiten Links sind jetzt veraltet. Sie können stattdessen das Netzwerk verwenden. Ich bin nicht sicher über Compose v.1, aber in V.2 sind alle Container in gemeinsamen docker-compose-Datei in einem Netzwerk (more about networks) und können durch Namen gegenseitig aufgelöst werden. Beispiel für Docker-compose v.2 Datei:

version: '2' 
services: 
    web: 
    build: . 
    restart: always 
    volumes: 
     - .:/app/ 
    ports: 
     - "8000:8000" 
     - "80:80" 
    mysql1: 
    image: mysql:latest 
    volumes: 
     - "/var/lib/mysql:/var/lib/mysql" 
    environment: 
     MYSQL_ROOT_PASSWORD: secretpass 

Mit einer solchen Konfiguration können Sie mysql Container mit Namen mysql1 innerhalb Webcontainers lösen.

+0

Gibt es eine Möglichkeit, etwas im 'web' Container einzurichten, wenn PHP versucht, sich mit' localhost' zu verbinden, leitet es es automatisch zum 'mysql1' Container um? – Link14

+2

@ Link14 alle Aufrufe innerhalb 'web' auf' localhost' werden nur Adresse zu 'web' Container. Wenn Sie den mysql1-Container aufrufen wollen, müssen Sie den mysql1-Host aufrufen – Cortwave

Verwandte Themen