如何进入docker container内部
今天的故事是这样的:
我想要删除测试环境服务器上的一个mysql服务器,在客户端没有办法直接删除,用docker-compose run --rm app rake db:drop
只能删除一部分的数据库,有几个数据库没有和这个app连接配置,所以删不掉。这个时候,想到,数据库其实是mysql控制的,直接去mysql那里删不就行了?所以我google了一下how to delete database in docker mysql
看到的结果大致都是:docker run
让你的container 去执行那句删除指令。但是要想运行那句话,我需要提供mysql的密码,以一个option的形式来传入到container来执行。但我由于了一下,而是去看了docker mysql 的官方hub,里面教会了我直接进入container内部。
Container是一个虚拟的电脑
我之前在一些视频教程中见过有人直接进入container内部,用的命令类似于:docker run --rm 路径 路径 <image name> bash
。但当时没有理解bash是什么意思,但是想到我本地的terminal就是运行在bash,所以还算理解。然而,这个指令知识在刚刚创立container的时候用了一下,但对于一个已经在运行的container,我不知道怎么进入他的内部,甚至以为我没法进入他的内部。
然后,当我看到这个命令的时候:
docker exec -it <container name> bash
我确认了这个比喻(container是一个虚拟的电脑)的有效性。下面是我进入到一个container之后的画面:
那container看起来就行事host的微缩模型。
在Container内部直接运行linux command
从图一中你已经看到我可以运行ls指令,和mysql指令。当我更进一步,运行完mysql执行后,我相当于进入了container中的mysql。
Recall
-
docker exec -it <container name> bash
,利用bash来运行container的terminal