正在尝试连接到 docker 中的 mariadb 运行
Trying to connect to mariadb running in docker
我在 docker 容器中有一个数据库 运行。它不发布 mariadb 的端口 3306.
现在我想远程登录到 docker 主机,连接到容器并从我的笔记本电脑访问数据库
laptop ---> dockerhost ---> container
以便使用 DbVisualizer 等 GUI 工具访问数据库。
我的想法是打开与 socat 的连接,但我卡住了。基本上是这样的:
socat TCP4-LISTEN:3306 EXEC:'ssh dockerhost sudo docker exec container "socat - TCP:localhost:3306"'
最后一次尝试失败,在 DbVisualizer 中显示 "Unexpected exception encountered during query.",在 shell.
命令是(为了便于阅读而损坏):
socat TCP4-LISTEN:3306,forever,reuseaddr,fork \
exec:'
ssh dockerhost \
sudo docker exec container "
socat STDIO TCP:localhost:3306,forever,reuseaddr,fork
"
'
我希望有人能指出我做错了什么或告诉我如何实现我的目标。
使用 docker run -p
或 Docker Compose ports:
选项删除并重新启动容器,使其在 Docker space 之外可见。 (您将实际的数据库数据存储在一个卷中,对吗?重新启动时它将继续使用该卷中的数据。)
如果您对直接从主机外访问容器感到满意,那么您可以使用普通端口调用 -p 3306:3306
,然后使用 dockerhost
作为主机名和第一个端口号作为端口号。
如果您仍然需要 ssh 隧道,可以将端口绑定到 Docker 主机的本地主机接口,然后使用 ssh 端口转发。
dockerhost$ docker run -p 127.0.0.1:3306:3306 -v ... mysql
laptop$ ssh -L 3306:localhost:3306 dockerhost
laptop$ mysql -h 127.0.0.1
docker exec
在许多方面等同于 ssh root@...
并且不是与网络可访问服务交互的正常方式。
我在 docker 容器中有一个数据库 运行。它不发布 mariadb 的端口 3306.
现在我想远程登录到 docker 主机,连接到容器并从我的笔记本电脑访问数据库
laptop ---> dockerhost ---> container
以便使用 DbVisualizer 等 GUI 工具访问数据库。
我的想法是打开与 socat 的连接,但我卡住了。基本上是这样的:
socat TCP4-LISTEN:3306 EXEC:'ssh dockerhost sudo docker exec container "socat - TCP:localhost:3306"'
最后一次尝试失败,在 DbVisualizer 中显示 "Unexpected exception encountered during query.",在 shell.
命令是(为了便于阅读而损坏):
socat TCP4-LISTEN:3306,forever,reuseaddr,fork \
exec:'
ssh dockerhost \
sudo docker exec container "
socat STDIO TCP:localhost:3306,forever,reuseaddr,fork
"
'
我希望有人能指出我做错了什么或告诉我如何实现我的目标。
使用 docker run -p
或 Docker Compose ports:
选项删除并重新启动容器,使其在 Docker space 之外可见。 (您将实际的数据库数据存储在一个卷中,对吗?重新启动时它将继续使用该卷中的数据。)
如果您对直接从主机外访问容器感到满意,那么您可以使用普通端口调用 -p 3306:3306
,然后使用 dockerhost
作为主机名和第一个端口号作为端口号。
如果您仍然需要 ssh 隧道,可以将端口绑定到 Docker 主机的本地主机接口,然后使用 ssh 端口转发。
dockerhost$ docker run -p 127.0.0.1:3306:3306 -v ... mysql
laptop$ ssh -L 3306:localhost:3306 dockerhost
laptop$ mysql -h 127.0.0.1
docker exec
在许多方面等同于 ssh root@...
并且不是与网络可访问服务交互的正常方式。