【问题标题】:docker compose run mysql client against running mysql containerdocker compose 针对正在运行的 mysql 容器运行 mysql 客户端
【发布时间】:2015-08-28 14:22:46
【问题描述】:

我刚刚进入 docker 并使用the official image 设置了一个简单的 mysql 5.5。这是我的相关文件。

#Dockerfile
FROM mysql:5.5                                                                                                                             
ENV MYSQL_ROOT_PASSWORD password

#docker-compose.yml
db:                                                                                                                                        
  build: .

现在我运行docker-compose build,然后运行docker-compose up 给出以下输出

db_1 | 150828 14:04:17 [Note] mysqld: ready for connections.
db_1 | Version: '5.5.45'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)

现在我在另一个终端运行 docker-compose run db bash 并进入 bash shell。但是在这个 shell 中,如果我尝试连接 mysql 客户端,我会得到一个错误。

root@94a43b1f5be0:/# mysql -u root -p  

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

同样的事情也适用于普通的旧码头工人。 示例(使用相同的 Docker 文件):

docker build -t my-new-image .
docker run --name my-new-image-container -d my-new-image
docker exec -it my-new-image-container bash
root@8408282d162f:/# mysql -u root -p
mysql>

我在使用 docker-compose 时做错了什么。如何连接到我正在运行的 mysql 容器并触发一些查询。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql docker docker-compose


    【解决方案1】:

    使用docker-compose run 实际上会启动一个新容器,而不是连接到现有容器。在这种情况下,您已经用bash 覆盖了该命令,因此 mysql 服务器尚未启动。

    您可以做的只是将docker exec 放入docker-compose ps 提供的容器中。

    顺便说一句,你不需要在这里建立自己的形象;您可以在docker-compose.yml 的环境变量中设置密码。这还具有不将密码烘焙到图像中的优点。

    【讨论】:

    • 啊...这很有道理..感谢您的快速响应
    猜你喜欢
    • 2014-09-24
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多