【问题标题】:seperate mysql server and apache webserver with docker?用 docker 分离 mysql 服务器和 apache web 服务器?
【发布时间】:2020-12-04 20:45:36
【问题描述】:

我的 apache2 网络服务器在一个 docker 容器中。用户可以键入一封电子邮件,它会将其存储在 SQL 数据库中。但是当我尝试专门为 mysql 服务器运行不同的 docker 容器时,连接被拒绝。

用于 webserver 的 Docker 容器:docker run -t -d -p 80:80 --name webserver ubuntu

mysql 服务器的 Docker 容器:docker run -t -d -p 3306:3306 --name mysql_server ubuntu

这是我存储数据的 php 代码:

<?php

$servername = "1.1.1.1:3306"; //yes i know i need to put a valid IP here. Just put this as an example
$username = "username";
$password = "password";
$dbname = "Emails";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
$email = $_POST['email'];

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "invalid email format";
}

$sql = "INSERT INTO users (email)
VALUES ('$email')";

if ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
  header("Location: Thankyou.html");
  exit;
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?>

【问题讨论】:

  • 1.1.1.1是代表宿主机的地址,还是docker容器?
  • 你能提供你的镜像的 Dockerfile 吗?您无法在普通的 ubuntu 容器中运行此脚本。您可以考虑使用 Docker Compose 来启动这两个容器,Docker 文档中的Networking in Compose 描述了那里的网络环境;即使您手动使用 docker network create 创建容器网络,该页面也很有用。

标签: php mysql docker apache2


【解决方案1】:

如果我理解正确,你有一个运行 mysql 的容器和一个运行 apache 的容器。 该错误可能表明 mysql 未配置为接受来自运行 apache 的子网的连接。 确保 apache docker 可以成功连接到 mysql 并进行身份验证。

【讨论】: