无法将两个docker连接在一起,一个数据库,一个.net核心应用程序

时间:2016-12-05 09:24:24

标签: c# mysql .net connection-string

我正在使用.NET Core和MySQL构建一个api,这一切都已完成。我现在在Docker中设置它。首先,我在Docker中设置应用程序,连接到笔记本电脑本地运行的数据库。我不得不在运行命令中添加--add-host=docker:<My local IP-address>以连接到数据库并将连接字符串更改为<My local IP-address>

现在我想将MySQL数据库放在一个单独的Docker实例中。我通过这样做来运行它:

docker run -p 3306:3306 --name mysqlserver --expose 3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_ROOT_HOST=% -d mysql/mysql-server


我可以通过

从我的本地机器连接到这个Docker数据库
mysql -h 127.0.0.1 -P 3306 -u root -p

哪种方法正常。

现在我想从另一个Docker实例中的API连接到这个数据库。我确实使用--link选项将容器链接在一起:

sudo docker run -p 5000:5000/tcp --link mysqlserver:mysql -it --rm apimysql

它开始很好,但是它提供了一个异常,它无法连接到数据库。我认为问题出在连接字符串中。我不知道我必须连接的服务器的IP地址/主机名是什么。这是我的连接字符串:

"DefaultConnection":"Server=127.0.0.1;Uid=root;Pwd=password;Database=webapi;"

1 个答案:

答案 0 :(得分:1)

在连接字符串中使用127.0.0.1我感到很愚蠢。我将3306转发给localhost所以我想; “我可以在我的连接字符串中使用它。”但是然后localhost不是该docker中的localhost。所以我通过以下方式检查了运行MySQL容器的IP地址:

sudo docker inspect mysqlserver | grep IPAddress

然后在连接字符串中使用该IP地址:

"DefaultConnection":"Server=172.17.0.2;Uid=root;Pwd=password;Database=webapi;"

我启动了应用程序,一切都像魅力一样。