2017-09-14 60 views
1

为什么在调用docker-compose run时需要指定主机?用`docker-compose run`调用的mysql客户端vs`docker-compose exec`

例如

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

似乎是

docker-compose exec db_container mysql -uuser -ppass db_name

直接相当于当从第一示例省略了主机名的标志,MySQL的失败,出现“不能连接到插座”错误。

这两个例子有什么区别?

回答

3

docker-compose run将在同一网络上启动一个新容器,其名称如folder_db_container_run_1。这是因为你传递了一个命令,所以没有运行mysql。所以它正在运行那个命令。所以你从这个容器连接到原始分贝容器

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 

这就是为什么它的工作原理。在这种情况下没有额外的容器发射

+0

谢谢,这是有道理的。如果你有时间,可否请你指出我在文档中的相关段落?我刚刚阅读了'docker-compose run'的条目,我不认为这是明确的。 –

+1

https://docs.docker.com/compose/reference/run/。 '运行时使用的命令将启动到新容器中,并使用服务定义的配置(包括卷,链接和其他详细信息)进行配置。但是,有两个重要的区别 –