Can';t使用docker连接数据库,使用mysql和PHP7编写

Can';t使用docker连接数据库,使用mysql和PHP7编写,php,mysql,docker,docker-compose,Php,Mysql,Docker,Docker Compose,从PHP7.0.1-apache容器连接到链接的mysql容器时遇到问题 PHP容器Dockerfile: FROM php:7.0.1-apache # Initialize html and php.ini COPY src/ /var/www/html/ COPY config/php.ini /usr/local/etc/php/ # Update modules. RUN apt-get update docker-compose.yml: web: build: . p

从PHP7.0.1-apache容器连接到链接的mysql容器时遇到问题

PHP容器Dockerfile:

FROM php:7.0.1-apache

# Initialize html and php.ini
COPY src/ /var/www/html/
COPY config/php.ini /usr/local/etc/php/

# Update modules.
RUN apt-get update
docker-compose.yml:

web:
  build: .
  ports:
   - "80:80"
  links:
   - "db"
  volumes:
   - "./src/:/var/www/html/"

db:
  image: "mysql"
  ports:
   - "3306:3306"
  environment:
   - "MYSQL_ROOT_PASSWORD=somepword"
index.php:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "somepword";
$db = "test_db";

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

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

我不确定哪里出了问题,基本上我的PHP容器中似乎没有正确配置mysql。有什么建议吗?

是的,正如您所说,您的安装不包括需要手动安装的Mysqli扩展

将MySQLi的安装添加到Dockerfile中,就像这样,您应该很好:

FROM php:7.0.1-apache

RUN apt-get update && apt-get install -y mysql-client libmysqlclient-dev \ 
      && docker-php-ext-install mysqli
    # Initialize html and php.ini
COPY src/ /var/www/html/
COPY config/php.ini /usr/local/etc/php/

最后也会丢失apt get更新。如果您希望运行
apt-get-update&&apt-get-upgrade
来实际更新模块。老实说,你不应该这么做。这将导致Docker文件在几周内无法生成相同的版本,原因很简单,因为依赖项已更改,哪种类型的文件不符合Docker point of Docker的部分,不是吗?:)

谢谢--但是如果我没有首先包含apt get update,那么它就找不到包:E:找不到包mysql客户端E:找不到包libmysqlclient devYea对,很抱歉这部分的措辞有点混乱。我想说的是,你可能不应该在Dockerfile的末尾运行一个简单的apt get update。但当然,如果你想安装这些东西,你很可能需要提前对大多数基本映像进行更新。它现在正在查找连接,但我得到的是“连接失败:连接被拒绝”--我的index.php中是否有任何内容看起来不正确?Jup数据库主机不是127.0.0.1,您没有在这两个容器之间使用共享网络接口。尝试在php中设置db而不是127.0.0.1
FROM php:7.0.1-apache

RUN apt-get update && apt-get install -y mysql-client libmysqlclient-dev \ 
      && docker-php-ext-install mysqli
    # Initialize html and php.ini
COPY src/ /var/www/html/
COPY config/php.ini /usr/local/etc/php/