Laravel无法连接到dockerise数据库

问题描述:

我创建了三个容器(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 

试试 “diba_cont” 作为DB_HOST应该做的工作。 Docker会自动声明一个DNS规则,并附带容器的名称以联系容器