【发布时间】:2020-01-20 14:05:12
【问题描述】:
我正在尝试从 PHP 容器连接到容器化 MySQL DB,尽管所有容器都在同一个网络上,但问题是当我点击http://localhost:8080/dbTest.php 时,我一直收到Connection failed: invalid data source name,尽管我已经检查过凭据是否正确demo DB 使用mysql -u root -p
我在 mysql 日志中看到此消息 mbind: Operation not allowed 可能相关吗?
谢谢
Apache Dockerfile
FROM httpd:latest
RUN apt-get update
RUN apt-get upgrade
COPY demo.apache.conf /usr/local/apache2/conf/demo.apache.conf
RUN echo "Include /usr/local/apache2/conf/demo.apache.conf" >> /usr/local/apache2/conf/httpd.conf
cmd:docker run -p 8080:80/tcp -v /home/hmalabeh/tutorial/docker/lamp/files/:/usr/local/apache2/htdocs/ - -link=php --name apache --network backend -i 8f704f51962d
PHP Dockerfile
FROM php:7.2.7-fpm-alpine3.7
RUN docker-php-ext-install mysqli
RUN docker-php-ext-enable mysqli
RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 9000
cmd: docker run -p 9000:9000 -v /home/hmalabeh/tutorial/docker/lamp/files/:/var/www/html/ --name php - -网络后端 -i 1cc049496b03
MySQL Dockerfile
FROM mysql:latest
RUN apt-get update
RUN apt-get upgrade
ENV MYSQL_ROOT_PASSWORD=root
cmd:docker run -p 3306:3306 -p 33060:33060 --name mysql --network backend --link=php -i 7bb7d4985301
dbTest.php
<?php
class DBConnect
{
private $dsn = "mysql:dbname=demo;host=127.0.0.1;port=3306;";
private $dbUsername = "root";
private $dbPassword = "root";
private $conn;
public function connect()
{
try {
echo 'Attempt Connection. ';
$this->conn = new PDO($dsn, $dbUsername, $dbPassword);
echo 'Connected successfully. ';
} catch (PDOException $exception) {
echo 'Connection failed: ' . $exception->getMessage();
}
return $this->conn;
}
}
$co = new DBConnect();
$co->connect();
?>
我正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9639160c0824 8f704f51962d "httpd-foreground" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp apache
38e630a9cb01 7bb7d4985301 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, 0.0.0.0:33060->33060/tcp mysql
c7f6e8db26a9 1cc049496b03 "docker-php-entrypoi…" 2 hours ago Up 2 hours 0.0.0.0:9000->9000/tcp php
【问题讨论】:
-
127.0.0.1或localhost在 Docker 中几乎总是意味着“这个容器”。 -
如果某个答案解决了您的问题,请考虑接受该答案。以下是meta.stackexchange.com/questions/5234/… 然后返回此处并对勾号/复选标记执行相同操作直到它变为绿色的方法。这通知社区,找到了解决方案。否则,其他人可能会认为问题仍然悬而未决,可能想要发布(更多)答案。您将获得积分,并鼓励其他人帮助您。 欢迎来到 Stack!
-
@DavidMaze 为解决我的连接问题(redis 和 mysql)而受苦的日子以您的小评论结束;非常感谢
标签: php mysql apache docker dockerfile