Docker容器的基本操作
在深入讨论如何进入容器并运行命令之前,让我们先回顾一下Docker容器的一些基本操作:
-
列出容器:使用
docker ps
命令列出当前正在运行的容器。如果你还想看到已经停止的容器,可以添加-a
或--all
选项。 -
启动容器:使用
docker start
命令加上容器ID或名称来启动一个已停止的容器。 -
停止容器:使用
docker stop
命令加上容器ID或名称来停止一个正在运行的容器。 -
删除容器:使用
docker rm
命令加上容器ID或名称来删除一个已停止的容器。
进入Docker容器
进入Docker容器并运行命令是Docker用户经常需要执行的操作之一。这可以通过几种不同的方式完成,每种方式都有其特定的用途和场景。
1. 使用docker exec
命令
docker exec
命令是在运行中的容器内执行命令的最常用方法。这个命令不会启动一个新的shell,而是直接在容器内执行指定的命令。
基本语法:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
示例:
-
在名为
my_container
的容器内执行bash
命令(如果容器内有bash):docker exec -it my_container bash
这里,-it
选项将分配一个伪终端(-t
)并与容器的标准输入(STDIN)连接(-i
),这样你就可以与bash shell进行交互了。
2. 使用docker attach
命令
虽然docker attach
命令也可以用来连接到正在运行的容器,但它主要用于查看容器的标准输出(STDOUT)和标准错误输出(STDERR),或者向容器发送输入(STDIN)。然而,它并不适合执行新的命令,因为它会附加到容器的当前shell或进程上。
基本语法:
docker attach [OPTIONS] CONTAINER
注意:如果你使用docker attach
连接到容器,并且容器中没有正在运行的前台进程(比如bash shell),那么docker attach
可能会立即退出,因为它没有可以附加的进程。
3. 使用docker run
命令(以交互模式)
虽然docker run
命令主要用于创建并启动新的容器,但你可以通过添加-it
选项以交互模式运行容器,并在容器内启动一个shell。这实际上是在容器启动时立即进入容器。
基本语法:
docker run -it [OPTIONS] IMAGE [COMMAND] [ARG...]
示例:
- 以交互模式运行Ubuntu镜像,并在容器内启动bash shell:
docker run -it ubuntu bash
注意事项
- 安全性:进入容器并运行命令时,请确保你信任容器内的软件,特别是当你以root用户身份执行命令时。
- 环境变量:在容器内运行的命令可能会受到容器环境变量的影响。你可以使用
docker exec
命令的--env
选项来设置或覆盖环境变量。 - 持久性:在容器内所做的更改(如安装软件包、修改文件等)在容器停止并删除后通常会丢失,除非这些更改被保存在卷(volume)或绑定挂载(bind mount)中。