2017-01-06 1 views
0

Im Setup versucht, einen Docker-Container auf OSX mit Docker - Ubuntu - Nginx - MariaDB eine Laravel App zu laufenDocker - Ubuntu - Nginx - MariaDB - Verbindung abgelehnt

Meine Docker Einstellungen sind:

version: "2" 
services: 
    nginx: 
     build: 
      context: ./nginx 
     ports: 
      - "8080:80" 
     volumes: 
      - ./app:/var/app 
    fpm: 
     build: 
      context: ./fpm 
     volumes: 
      - ./app:/var/app 
     expose: 
      - "9000" 
     environment: 
      - "DB_HOST=db" 
      - "DB_DATABASE=laravel_db" 
    db: 
     image: mariadb 
     ports: 
      - "33061:3306" 
     environment: 
      - MYSQL_ROOT_PASSWORD=root 
      - MYSQL_DATABASE=laravel_db 
     volumes: 
      - ./database:/var/lib/mysql 

Und die 2 docker Dateien:

FROM nginx 
ADD ./default.conf /etc/nginx/conf.d/ 
RUN echo "daemon off;" >> /etc/nginx/nginx.conf 
CMD service nginx start 

FROM ubuntu:latest 
RUN apt-get update && apt-get install -y software-properties-common language-pack-en-base \ 
    && LC_ALL=en_US.UTF-8 add-apt-repository -y ppa:ondrej/php \ 
    && apt-get update \ 
    && apt-get install -y php7.0 php7.0-fpm php7.0-mysql mcrypt php7.0-gd curl \ 
     php7.0-curl php-redis php7.0-mbstring sendmail supervisor \ 
    && mkdir /run/php \ 
    && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf 

RUN sed -i -e 's/listen = \/run\/php\/php7.0-fpm.sock/listen = 0.0.0.0:9000/g' /etc/php/7.0/fpm/pool.d/www.conf \ 
    && sed -i -e 's/;daemonize = yes/daemonize = no/g' /etc/php/7.0/fpm/php-fpm.conf 

WORKDIR /var/app 

EXPOSE 9000 

CMD ["/usr/bin/supervisord"] 

So weit so gut. Ich kann auf die Homepage der Laravel App als localhost: 8080 zugreifen und Sequel Pro für den Zugriff auf die MySQL DB verwenden.

Aber wenn der Zugang zum Laravel Route, die DB-Abfrage erfordert, es gibt "Connection refused"

Dann erstelle ich eine rohe PHP-Datei einen DB-Verbindungstest zu machen:

$link = mysqli_connect('127.0.0.1', 'root', 'root', 'laravel_db', 33061); 
if(!$link) { 
    die('failed to connect to the server: ' . mysqli_connect_error()); 
} 

Und ich Verbindung verweigert auch Fehler.

Ich versuchte mit 127.0.0.1 und localhost aber keine Hoffnung.

Versuchte es zu googeln, aber die meisten Antworten sind über Ports, die nicht veröffentlicht werden ...

Dank

+0

Könnten Sie versuchen, '' '$ link = mysqli_connect ('db', 'root' werden, 'root', 'laravel_db', 33061); '' '? – Tuan

+0

Nein, ich benutze genau diesen Code und ich bekomme Verbindung verweigert –

Antwort

1

Sie müssen die link Richtlinie verwenden, um verschiedene Docker Behälter zu verbinden, wenn Docker-compose verwenden. Dh, wenn Sie mit B Docker Behälter Docker Behälter A kommunizieren haben wollen, müssen sie 'verknüpft'

docker-compose documentation on links

+0

Ich fügte die 'Links' in' nginx'-Dienst, aber immer noch Verbindung abgelehnt. Versucht: Links: fpm oder db –

+0

Es sieht so aus, als ob Sie v2 von docker-compose verwenden, so dass es eigentlich keine "Link-Anweisung" wäre. Du wirst 'depends_on: db' oder was immer du willst benutzen. Der Schlüssel ist, dass der Host 'db' ist (oder wie auch immer der Container benannt ist), es wird nicht 'localhost'/127.0.0.1 – renlo

+0

Ich ersetze es durch 'depends_on: - db - fpm' aber immer noch. Muss ich etwas neu aufbauen oder etwas vor 'docker-composer up -d' machen? –

Verwandte Themen