2017-09-14 63 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/。 '運行時使用的命令將啓動到新容器中,並使用服務定義的配置(包括卷,鏈接和其他詳細信息)進行配置。但是,有兩個重要的區別 –