为什么调用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/