Docker(Ubuntu 16.04)Apache/PHP7/Mysql5_7 - 数据库:连接失败:连接被拒绝

Docker(Ubuntu 16.04)Apache/PHP7/Mysql5_7 - 数据库:连接失败:连接被拒绝

问题描述:

我试图通过Docker构建docker-container:Apache/PHP7/Mysql 5.7 Ubuntu-16.04。Docker(Ubuntu 16.04)Apache/PHP7/Mysql5_7 - 数据库:连接失败:连接被拒绝

问题是我没有从index.php(localhost:8080)的数据库连接。 如果我尝试连接它说:“连接失败:连接被拒绝”。

Apache的PHP7 dockerfile:https://github.com/nimmis/docker-apache-php7/blob/master/Dockerfile

的文件夹是:

Apache的PHP7(包括Dockerfile)

HTML(包括的index.php)

的MySQL(MySQL的数据)

docker-compose.yml:

version: '2' 

services: 
    php: 
    build: apache_php7 
    container_name: apache_php7 
    ports: 
     - "8080:80" 
     - "443:443" 
    volumes: 
     - ./html:/var/www/html 
    links: 
     - db 
    db: 
    image: mysql:5.7 
    container_name: mysql_5_7 
    volumes: 
    - ./mysql:/var/lib/mysql 
    ports: 
    - "127.0.0.1:3306:3306" 
    environment: 
    - MYSQL_ROOT_PASSWORD=test 
    - MYSQL_USER=admin 
    - MYSQL_PASSWORD=test  
    - MYSQL_DATABASE=database 

的index.php(PHP - 摘录)

<?php 
$servername = "127.0.0.1"; 
$username = "admin"; 
$password = "test"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password); 

// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
echo "Connected successfully"; 
?> 

我搜索类似的帖子,并试图这也与PHP-PDO等 - 无济于事工作。

我能够通过终端与命令手动登录到MySQL的容器: 搬运工EXEC -it bash中, ,并用“的MySQL -u根-p”登录 - >从此开始:测试。

+0

你有什么东西在本地运行(比如,一个MySQL实例)在端口3306上侦听? – jcorry

+0

我不认为你应该使用127.0.0.1,运行'docker inspect db | grep IPAddress'并在你的连接中使用该地址。 –

+0

不,没有安装本地数据库,我会尽一切与码头。 如果我运行docker inspect命令(运行docker-compose之后),它说: “错误:没有这样的对象:db” – beer

其解决。 首先,我通过

docker ps 

获得运行MySQL容器的名称/ ID,然后我从命令

docker inspect <name of container> | grep IPAddress 

有一个IP地址就像这个截图。

command from nigel

我还修改了这条线在我的搬运工,compose.yml:

volumes: 
    - /var/lib/mysql:/var/lib/mysql 

感谢Nigel仁和感谢jcorry回答。现在一切正常。