本地运行的docker容器无法连接到远程mysql数据库

eni9jsuy  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(366)

我正在尝试开发一个从远程数据库获取信息的微型服务,但当我运行容器时,它无法连接到该数据库。
容器在本地运行(我还在开发),数据库托管在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:
s3fp2yjn

s3fp2yjn1#

启动容器 docker run --network host ... 将使容器共享主机的网络堆栈。这应该能解决问题。

5ktev3wc

5ktev3wc2#

我最终通过从api复制原始连接代码并用它替换容器中的连接代码来解决这个问题。
我注解掉了中断的代码并比较了两者,但没有发现任何区别。主机字符串中没有引号,没有输入错误,没有任何意义。
唯一的区别是我设置构建宿主字符串的变量的方式。这些变量的值是相同的,所以它真的没有意义。
不管怎样,这样做可以修复它。

相关问题