mysql - Docker 容器不会访问主机上的 MySQL

标签 mysql docker asp.net-core virtualbox host

我在 VirtualBox 的虚拟机中安装了一个 docker,我正在尝试运行一个带有连接到主机上的 MySQL 数据库的 dot Net Core 应用程序的容器。所以我在 Virtual Box 上为 mysql 和我的应用程序配置了转发端口。我可以通过主机中的“http://localhost:3131/api/users/login”访问我的服务,但它会抛出一个错误,提示无法连接到 MySQL 数据库。当我不使用 docker 时,我也可以在主机上运行应用程序。我查看了 Internet 上的其他线程,但除了下面显示的最后一个命令之外,没有什么能完全启发我,但我无法运行,因为配置的 MySQL 身份验证是在应用程序中硬编码的,而不是使用配置文件。一般配置如下:

程序.cs

var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .UseApplicationInsights()
    .UseUrls("http://*:80")
    .Build();

docker 文件

FROM microsoft/aspnetcore

WORKDIR /app

COPY bin/Release/PublishOutput/ .

EXPOSE 80

ENTRYPOINT ["dotnet", "UsersApi.dll"]

Docker 运行命令

docker run -d -p 3000:80 user_api
// and also tried
docker run -d -p 3000:80 user_api --net=host
// and also tried
docker run -d -p 3000:80 user_api --add-host localhost:127.0.0.1

VirtualBox 转发端口:

NAT 3131 -> 3000    tcp
NAT 3306 -> 3306    tcp
NAT 2415 -> 22      

localhost(我以为它会出现端口 3131,但它仍然调用该服务。)

Starting Nmap 7.40 ( https://nmap.org ) at 2017-05-22 11:23 E. South America Standard Time

Nmap scan report for localhost (127.0.0.1)

Host is up (0.0013s latency).

Other addresses for localhost (not scanned): ::1

rDNS record for 127.0.0.1: rinaldipc.com

Not shown: 994 closed ports

PORT     STATE SERVICE

22/tcp   open  ssh

135/tcp  open  msrpc

445/tcp  open  microsoft-ds

2179/tcp open  vmrdp

3306/tcp open  mysql

5357/tcp open  wsdapi

我认为我需要添加的 Dockfile 中的 RUN 命令,但我不确定程序。

RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf

https://stackoverflow.com/questions/33827342/how-to-connect-mysql-workbench-to-running-mysql-inside-docker/33827463#33827463

最佳答案

由于您在 VirtualBox 中运行,因此在 VirtualBox 主机和 docker 之间存在另一层。您有一台托管 VirtualBox (1) -> Linux in VirtualBox (2) -> docker (3) 的机器。

docker (3) 的“localhost”表示 (2),因此它期望 mysql 在 (2) 上。在您的情况下,您在 (1) 上安装了 mysql。

从 (3) 访问 (1) 的唯一方法是明确使用 (1) 的 IP 而不是“localhost”别名。

关于mysql - Docker 容器不会访问主机上的 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44119428/

相关文章:

php - 预订系统。检查现有数据

php - 获取父工单的用户 ID - MySQL

mysql - 评论回复查询(倒序)

security - 使用非官方镜像的 Docker 安全问题

docker - Jenkins:具有jenkins master的docker容器和具有jenkins slave的docker容器之间的连接

java - MySQL 连接器错误 "The server time zone value Central European Time"

docker - 我在更新之前正常工作的命令出现 'docker: invalid reference format'错误

c# - 在 .Net Core 中测试 Controller 总是返回 false?

c# - 代码中的 ASP.NET Core appsettings.json 更新

asp.net-core - .NET-Core 字节数组到图像