Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
如何从CLI或python脚本连接到docker容器中的myql_Python_Mysql - Fatal编程技术网

如何从CLI或python脚本连接到docker容器中的myql

如何从CLI或python脚本连接到docker容器中的myql,python,mysql,Python,Mysql,我想连接到Docker容器内的MySQL。我在docker容器中有一个正在运行的MySQL实例。因为我的主机上已经有3306个忙端口,所以我决定使用端口8081来启动MySQL容器。基本上,我是从docker run-p8080:80-p8081:3306--name test开始容器的。当我连接到我的容器时,我可以毫无错误地连接到我的MySQL。另一方面,我有一个web应用程序,可以从我的主机使用完全相同的端口(8081)连接到MySQL。这意味着MySQL工作正常,可以从外部访问。但是现在在

我想连接到Docker容器内的MySQL。我在docker容器中有一个正在运行的MySQL实例。因为我的主机上已经有3306个忙端口,所以我决定使用端口8081来启动MySQL容器。基本上,我是从docker run-p8080:80-p8081:3306--name test开始容器的。当我连接到我的容器时,我可以毫无错误地连接到我的MySQL。另一方面,我有一个web应用程序,可以从我的主机使用完全相同的端口(8081)连接到MySQL。这意味着MySQL工作正常,可以从外部访问。但是现在在我的python脚本中,我无法连接。我也无法使用CLI连接到MySQL。端口号似乎根本没有被解释。我看到,如果使用例如
mysql-p8081-uroot-P
。这只是尝试连接到主机MySQL(端口3306),而不是端口8081上的容器MySQL(当我输入主机MySQL凭据时,它连接到主机MySQL)。在我的python脚本中,我使用了以下内容:
conn=MySQLdb.connect(主机='localhost',端口=8081,用户='root',passwd='')
。但这也不起作用。在MySQL手册页中,我看到以下内容:

   ·   --port=port_num, -P port_num
       The TCP/IP port number to use for the connection.
请问我做错了什么

mysql --version: 
mysql  Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using  EditLine wrapper
更新 这是我的docker ps:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                    NAMES
b370c91594d3        test            "/bin/sh -c /start.sh"   14 hours ago        Up 14 hours         8080/tcp, 0.0.0.0:8080->80/tcp, 0.0.0.0:8081->3306/tcp   test

尝试将localhost更改为0.0.0.0(也可以尝试127.0.0.1)web应用是否也在容器中?你在什么平台上运行它?@Adam网络在同一个容器中,但我认为连接是从外部建立的。基本上,它是一个teampass()容器。我使用localhost作为地址。我在Ubuntu 16.04上。你可以从本地机器访问web应用程序,对吗?@Adam是的,但当我尝试使用
MySQL-u root--port=8081从CLI连接到MySQL时,我遇到以下问题:
错误1045(28000):拒绝用户“root”@“localhost”的访问(使用密码:否)