我正在尝试开发一个从远程数据库获取信息的微型服务,但当我运行容器时,它无法连接到该数据库。
容器在本地运行(我还在开发),数据库托管在awsrds auroramysql中。
该数据库正在多个生产网站上使用,使用的是我试图在容器中使用的同一个用户。用户拥有数据库的完全权限,我的本地phpmyadmin使用同一个用户连接到数据库,我用它管理数据库没有任何问题。
问题是容器中的数据库连接失败并出现拒绝访问错误。
数据库用户设置为 dbuser@%
但错误是:
拒绝访问用户“dbuser”@“[my public ip]”(使用密码:yes)。
我试图为添加另一个帐户 dbuser@[my public ip]
并赋予它与通配符主机帐户相同的权限,这没有区别。
作为另一个测试,我在容器中添加了一个curl调用来加载一个外部页面,以确保它能够建立外部连接,并且成功。只是db连接故障没有意义。
我的dockerfile如下所示:
FROM php:7.2-apache
RUN apt-get update
RUN docker-php-ext-install mysqli pdo pdo_mysql
RUN a2enmod rewrite
我希望有人发现了这件事,或者知道我遗漏了什么。
提前谢谢!
更多信息:
我正在使用docker for windows和docker compose来运行我的容器。我的docker-compose.yml文件如下所示:
version: "3"
services:
web:
image: repository/container:latest
volumes:
- ./src:/var/www/html
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- inv
networks:
inv:
2条答案
按热度按时间s3fp2yjn1#
启动容器
docker run --network host ...
将使容器共享主机的网络堆栈。这应该能解决问题。5ktev3wc2#
我最终通过从api复制原始连接代码并用它替换容器中的连接代码来解决这个问题。
我注解掉了中断的代码并比较了两者,但没有发现任何区别。主机字符串中没有引号,没有输入错误,没有任何意义。
唯一的区别是我设置构建宿主字符串的变量的方式。这些变量的值是相同的,所以它真的没有意义。
不管怎样,这样做可以修复它。