我有一个应用程序,希望通过tcp端口连接到mysql数据库。我正在构建一个Docker容器,该容器暂存云sql实例以供其连接(数据库包含从其他位置导入的测试用例)。我希望能够从docker容器内部转发mysql端口,并从容器外部进行连接,但出现错误。
当我在本地容器中有数据库时,可以这样连接:
# run in background, listening on port 13306
❯ docker run -p 13306:3306 -e MYSQL_ROOT_PASSWORD=test -d percona:5.7.26-centos
9c25...
❯ mysql -h127.0.0.1 -P13306 -uroot -ptest
mysql> --connection successful
但是当我在本地容器中有cloud_sql_proxy时,出现此错误:
# run in background, listening on port 13306 ❯ docker run -p 13306:3306 \ -v "${PWD}/gcloud:/root/.config/gcloud" \ -d portforwardexample \ cloud_sql_proxy "-instances=myproject:us-west2:myinstance=tcp:3306" d56c... ❯ mysql -h127.0.0.1 -P13306 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
如果我停止容器,则会收到不同的消息:
交流正在发生。❯ mysql -h127.0.0.1 -P13306 ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
...所以我知道some
我知道问题就在我这端,因为当我使用交互式会话并从容器内部进行连接时,一切都能按预期工作。
❯ docker run -it --rm -p 13306:3306 \ -v "${PWD}/gcloud:/root/.config/gcloud" \ portforwardexample root@bcf:/# cloud_sql_proxy "-instances=myproject:us-west2:myinstance=tcp:3306" & 2019/12/14 22:44:04 Listening on 127.0.0.1:3306 for myproject:us-west2:myinstance 2019/12/14 22:44:04 Ready for new connections root@bcf:/# mysql -h127.0.0.1 -P3306 mysql> --connection successful
为什么我不能从容器外部连接?我需要告诉容器可以通过docker转发端口的事情吗?
我省略了一些我认为与我的问题无关的细节,但这是一个包含一些其他细节(例如我正在使用的Dockerfile)的存储库:https://github.com/MatrixManAtYrService/cloudsqlproxyproblem
要点我有一个应用程序想要通过tcp端口连接到mysql数据库。我正在构建一个docker容器,该容器暂存云sql实例供其连接(数据库包含...
如果容器内的程序显示Listening on 127.0.0.1
,则可能无法从容器外部访问它,而您需要以某种方式对其进行配置,以使其绑定或侦听0.0.0.0(所有接口)。