使用 `docker-compose run` 与 `docker-compose exec` 调用的 Mysql 客户端

标签 mysql docker docker-compose

为什么调用docker-compose run时需要指定主机?

例如

docker-compose run db_container mysql -uuser -ppass db_name -h db_container

似乎直接等同于

docker-compose exec db_container mysql -uuser -ppass db_name

当从第一个示例中省略主机名标志时,mysql 失败并出现“无法连接到套接字”错误。

这两个例子有什么区别?

最佳答案

docker-compose run 将在同一网络上启动一个新容器,其名称类似于 folder_db_container_run_1。这没有运行 mysql,因为你向它传递了一个命令。所以它正在运行该命令。所以你从这个容器连接到原来的db容器

docker-compose run db_container mysql -uuser -ppass db_name -h db_container

当您执行 exec 时,您会进入正在运行的容器中。并且不指定主机意味着本地 mysql

docker-compose exec db_container mysql -uuser -ppass db_name

这就是它起作用的原因。在这种情况下没有启动额外的容器

关于使用 `docker-compose run` 与 `docker-compose exec` 调用的 Mysql 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46223409/

相关文章:

mysql - 带有 IN 和 SELECT 子查询的 CASE

docker - 如何管理由docker compose启动的一些容器

mysql - docker-compose up invalid mode/docker-entrypoint-initdb.d/- 无法为服务数据库创建容器

mysql:如果我的 .MYI(索引文件)比我的 .MYD 文件大,我是不是在用我的索引做一些愚蠢的事情?

php - 在 PHP 和 MYSQLI 中互相添加列值

php表单问题如果图像输入为空则不会插入数据

c++ - CMake 链接库在 Docker 镜像中失败

python - 使用 docker-compose 更新 odoo 自定义模块

Docker VS 代码移除 devcontainer

azure - 无法在 Azure 上的 Linux 容器中为 .net Core Kestral 服务器配置 HTTPS 端点