【发布时间】: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创建容器网络,该页面也很有用。