【发布时间】:2021-05-07 12:15:13
【问题描述】:
我的设置: docker(php、mysql、nginx 等)
我的问题:我无法连接到 php docker 容器中的远程 mysql 数据库
php 示例:
try
{
$this->live['pdo'] = new PDO(
'mysql:host='.$_ENV['DB_REMOTE_HOST'].';port='.$_ENV['DB_REMOTE_PORT'].';dbname='.$_ENV['DB_REMOTE_DATABASE'],
$_ENV['DB_REMOTE_USERNAME'],
$_ENV['DB_REMOTE_PASSWORD']
);
$this->live['pdo']->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->live['pdo']->exec("SET NAMES utf8");
$this->live['pdo']->exec("SET CHARACTER SET utf8");
}
catch (PDOException $e)
{
echo $e->getMessage();
exit;
}
我的 .env
DB_REMOTE_HOST = "5.9.xxx.xx"
DB_REMOTE_PORT = 3306
DB_REMOTE_DATABASE = "somedb"
DB_REMOTE_USERNAME = "someuser"
DB_REMOTE_PASSWORD = "xxxxxx"
我的 docker-compose.yml 的一部分
php:
build:
context: .
dockerfile: ./php/Dockerfile
args:
ENVIRONMENT: ${ENVIRONMENT}
container_name: php
restart: "unless-stopped"
ports:
- "9000"
- "9006"
- "3306:3306"
volumes:
- ./app/myapp.com:/var/www/html:cached
working_dir: /var/www/html
networks:
- my_network
所以当我尝试运行上面的 php 示例时,我得到:
SQLSTATE[HY000] [1045] 用户'someuser'@'85.110.xxx.xx'的访问被拒绝(使用密码:YES
85.110.xxx.xx 是我在https://whatsmyip.com/ 上使用我的macbook 获得的实际IP 地址
这对我来说很奇怪,因为我尝试访问的 ip 是 5.9.xxx.xx。 mysql 用户、数据库和密码是正确的,我检查了三次。我什至可以用续集登录。我已经尝试为 php 容器公开 3306 端口,并没有改变任何东西。
如果有人可以帮助我,我将非常感激。
【问题讨论】:
-
您的
DB_REMOTE_HOST必须是mysql,因为您将容器命名为mysql。 Docker 将名称路由到内部 ip。 -
是的,如果我想连接到我的本地 mysql 容器,那是正确的。但是我想在我的 docker 环境之外连接到一个很远的远程 mysql 服务器
标签: php mysql docker containers