gpt4 book ai didi

mysql - 从主机连接到 docker 容器中的 mysql

转载 作者:IT老高 更新时间:2023-10-28 12:33:49 24 4
gpt4 key购买 nike

(由于我对 Docker 或 mysql 管理的知识有限,这可能是一个愚蠢的问题,但由于我在这个问题上花了整整一个晚上,我才敢问它。)

简而言之

我想在 docker 容器中运行 mysql 并从我的主机连接到它。到目前为止,我取得的最好成绩是:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

更多详情

我正在使用以下 Dockerfile:

FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y mysql-server

# Ensure we won't bind to localhost only
RUN grep -v bind-address /etc/mysql/my.cnf > temp.txt \
&& mv temp.txt /etc/mysql/my.cnf

# It doesn't seem needed since I'll use -p, but it can't hurt
EXPOSE 3306

CMD /etc/init.d/mysql start && tail -F /var/log/mysql.log

在这个文件所在的目录下,我可以成功构建镜像并运行它:

> docker build -t my-image .
> docker run -d -p 12345:3306 my-image

当我附加到图像时,它似乎工作得很好:

# from the host
> docker exec -it <my_image_name> bash

#inside of the container now
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
[...]

但是我没有从主持人那里取得那么大的成功:

> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

更多细节

  • 我看到有一个问题 looks like mine .但是,它不一样(无论如何它没有任何答案)
    • 我看到有图片dedicated to mysql ,但我并没有取得更大的成功
    • 我的 grep -v 可能感觉很奇怪。诚然,可能有更清洁的方法来做到这一点。但是当我附加我的图像时,我可以观察到它实际上按预期工作(即:删除了 bind-address)。我可以在容器中看到 /var/log/mysql/error.log:

Server hostname (bind-address): '0.0.0.0'; port: 3306 - '0.0.0.0' resolves to '0.0.0.0'; Server socket created on IP: '0.0.0.0'.

最佳答案

如果您的 Docker MySQL 主机运行正常,您可以从本地机器连接到它,但您应该像这样指定主机、端口和协议(protocol):

mysql -h localhost -P 3306 --protocol=tcp -u root

将 3306 更改为您从 Docker 容器转发的端口号(在您的情况下为 12345)。

因为你在 Docker 容器中运行 MySQL,所以 socket 不可用,你需要通过 TCP 连接。在 mysql 命令中设置“--protocol”会改变这一点。

关于mysql - 从主机连接到 docker 容器中的 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33001750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com