Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker集装箱赢得';无法在主机上访问MySQL_Mysql_Docker_Asp.net Core_Virtualbox_Host - Fatal编程技术网

Docker集装箱赢得';无法在主机上访问MySQL

Docker集装箱赢得';无法在主机上访问MySQL,mysql,docker,asp.net-core,virtualbox,host,Mysql,Docker,Asp.net Core,Virtualbox,Host,我在VirtualBox的VM中安装了一个docker,我正在尝试运行一个容器,其中包含一个连接到主机上MySQL数据库的dot Net核心应用程序。因此,我已经在Virtual Box上为mysql和我的应用程序配置了转发端口。我可以通过主机中的“”访问我的服务,但它会抛出一个错误,表示无法连接MySQL数据库。当我不使用docker时,我还可以在主机上运行应用程序。我已经查看了internet上的其他线程,但是除了下面显示的最后一个命令之外,没有任何东西能够完全启发我,但是我无法运行,因为M

我在VirtualBox的VM中安装了一个docker,我正在尝试运行一个容器,其中包含一个连接到主机上MySQL数据库的dot Net核心应用程序。因此,我已经在Virtual Box上为mysql和我的应用程序配置了转发端口。我可以通过主机中的“”访问我的服务,但它会抛出一个错误,表示无法连接MySQL数据库。当我不使用docker时,我还可以在主机上运行应用程序。我已经查看了internet上的其他线程,但是除了下面显示的最后一个命令之外,没有任何东西能够完全启发我,但是我无法运行,因为MySQL身份验证是在应用程序中硬编码的,没有配置文件。一般配置如下所示:

Program.cs

var host = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseIISIntegration()
    .UseStartup<Startup>()
    .UseApplicationInsights()
    .UseUrls("http://*:80")
    .Build();
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上,但它无论如何都会调用该服务。)

在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之间还有另一层。在VirtualBox(2)->docker(3)中有一台托管VirtualBox(1)->Linux的机器

docker(3)的“localhost”表示(2),所以它希望mysql在(2)上。在您的例子中,在(1)上有mysql

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

那么,我如何从(1)输入localhost:3131来访问(3)呢?那么,从(3)访问(1)中的mysql难道不可能吗?(谢谢你的耐心)
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
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