用`docker-compose run`和`docker-compose exec`调用的mysql客户端

为什么在使用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运行将在同一个networking上启动一个名为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 

这就是为什么它的作品。 在这种情况下没有额外的容器启动