2017-07-25 76 views
1

我創建了三個容器(PhP-NGINX-MySql)來支持位於主機上的默認laravel項目。Laravel無法連接到dockerise數據庫

當我嘗試從laravel連接到數據庫,我得到錯誤:

Route::get('/', function() { 
    dd(App\User::all()); 
    return view('welcome'); 
}); 

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from users)

這是我在laravel-5.3.16

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=33061 
DB_DATABASE=homestead 
DB_USERNAME=homestead 
DB_PASSWORD=secret 

和ansible-劇本.ENV:

--- 
- hosts: localhost 
    environment: 
    PYTHONPATH: /usr/local/lib/python2.7/site-packages/ 

    tasks: 

    - name: get currernt location 
    command: pwd 
    register: my_way 

    - set_fact: host_dir="{{my_way.stdout}}" 

    - name: create image with nginx 
    docker_image: 
     path: /home/demaunt/Jun/dock_click/engie 
     dockerfile: engie.dockerfile 
     name: engie_image 

    - name: create image with php 
    docker_image: 
     path: /home/demaunt/Jun/dock_click/piha 
     dockerfile: piha.dockerfile 
     name: piha_image 

    - name: run piha container 
    docker_container: 
     name: piha_cont 
     image: piha_image 
     volumes: 
     - "/home/demaunt/Dockjun/laravel-5.3.16:/var/www/wapclick" 
     links: 
     - diba_cont:db 
     env: 
     DB_PORT: 3306 
     DB_HOST: database 

    - name: run engie container 
    docker_container: 
     name: engie_cont 
     image: engie_image 
     volumes_from: 
     - piha_cont 
     ports: 
     - "8080:80" 
     links: 
     - piha_cont:app 

    - name: run diba container 
    docker_container: 
     name: diba_cont 
     image: mysql:5.6 
     env: 
     MYSQL_DATABASE: homestead 
     MYSQL_USER: homestead 
     MYSQL_PASSWORD: secret 
     MYSQL_ROOT_PASSWORD: secret 
     ports: 
     - 33061:3306 

更奇怪的是,當我運行PHP工匠遷移我得到succesfull mesage:

Migration table created successfully. 
Migrated: 2014_10_12_000000_create_users_table 
Migrated: 2014_10_12_100000_create_password_resets_table 

下面是運行容器:

docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS       NAMES 
e926382db347  engie_image   "nginx -g 'daemon ..." 19 seconds ago  Up 18 seconds  443/tcp, 0.0.0.0:8080->80/tcp engie_cont 
c9563c839e45  piha_image   "docker-php-entryp..." 19 seconds ago  Up 18 seconds  9000/tcp      piha_cont 
5de541049da2  mysql:5.6   "docker-entrypoint..." 20 seconds ago  Up 19 seconds  0.0.0.0:33061->3306/tcp   diba_cont 

回答

1

試試 「diba_cont」 作爲DB_HOST應該做的工作。 Docker會自動聲明一個DNS規則,並附帶容器的名稱以聯繫容器