Docker容器将不会在主机上访问MySQL

我已经在VirtualBox中的一个虚拟机中安装了一个docker,我试图运行一个连接到主机上的MySQL数据库的Net Net应用程序的容器。 所以我在Virtual Box上configuration了mysql和我的应用程序的转发端口。 我可以通过主机中的 “ http:// localhost:3131 / api / users / login ”来访问我的服务,但是会报错,说不能连接MySQL数据库。 当我不使用docker的时候,我也能够在主机上运行应用程序。 我已经在互联网上看了其他线程,但没有任何启发我,除了最后一个命令显示,但我不能运行,因为MySQL身份validationconfiguration硬编码在应用程序中没有configuration文件。 一般configuration如下:

Program.cs中

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

Dockerfile

 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 fowarding端口:

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

本地主机(我认为它会出现端口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 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之间还有另外一层。 你有一台虚拟机(1) – > VirtualBox(2) – > docker(3)。

docker(3)的“localhost”意味着(2)所以它期望mysql在(2)上。 你的情况,你有(1)的MySQL。

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