如何使用docker与php进行php对话?

时间:2019-07-26 17:40:48

标签: php mysql docker mysqli docker-compose

这是我的docker-compose.yml文件:

# ./docker-compose.yml

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: xxx
      MYSQL_DATABASE: test_db
      MYSQL_USER: abc
      MYSQL_PASSWORD: xyz
    ports:
      - "9906:3306"
  web:
    build:
      context: .
      dockerfile: Dockerfile
    image: php:7.2.2-apache
    container_name: php_web
    depends_on:
      - db
    volumes:
      - ./php/:/var/www/html/
    ports:
      - "8100:80"
    stdin_open: true
    tty: true

然后我运行docker-compose up --build并访问http://localhost:8100,并从mysqli收到连接被拒绝的错误。

$mysqli->connect('db', 'abc', 'xyz', 'test_db', 9906);

1 个答案:

答案 0 :(得分:2)

您的 docker-compose.yml 文件看起来正确。更改您的PHP连接信息以连接到端口3306(容器),而不是9906(主机)。

<?php
// Use either 3306 or blank.
$link = mysqli_connect("db", "devuser", "devpass", "test_db", 3306);

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;
echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL;

mysqli_close($link);

// Output: Success: A proper connection to MySQL was made! The my_db database is great. Host information: db via TCP/IP