【问题标题】:How do I get php to talk to mysql using docker?如何让 php 使用 docker 与 mysql 对话?
【发布时间】:2019-07-26 17:40:48
【问题描述】:

这是我的 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);

【问题讨论】:

  • 在你的 PHP 中,9906 应该是 3306 吗? ... 'db', 'abc', 'xyz', 'test_db', 9906。测试了您的 .yml 并使用 3306blank 为我工作。

标签: php mysql docker mysqli docker-compose


【解决方案1】:

您的 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

【讨论】:

    猜你喜欢
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 2015-09-06
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多