docker run运行容器参数介绍

本文详细介绍了Docker的常用命令,包括-d、-i、-t、--name、Image[:tag]、--rm等选项的用途。强调了-d选项结合--rm用于短期进程的自动清理,以及如何通过-i和-t进入容器终端。还涵盖了端口映射、环境变量设置、容器卷的匿名和具名挂载,并讨论了容器权限的设定。此外,提到了如何覆盖默认的CMD和ENTRYPOINT指令,以及如何通过-v改变挂载卷的读写权限。文章最后讨论了具名挂载相对于匿名挂载的优势。
-d			#后台运行,执行完命令就会在后台运行,而如果和--rm一起使用的话,执行完就删除,不会在后台运行

对于使用-d启动的容器,如果要修改容器当中的内容,最好使用容器卷。

-i			#分配一个pseudo-tty,这个应该是一个终端
-t			#即使没有连接,也保持STDIN打开

-i-t一般一起使用,即进入到容器的终端

--name		#指定容器的名称,如果没有指定名称,将为你随机分配一个字符串
Image[:tag]	#指定镜像名称和版本信息
docker run ubuntu:14.04
--rm		#当容器退出时自动删除容器

--rm使用场景:默认情况下,容器的文件系统即使在容器退出后也会保存。这样调试就容易多了(因为可以检查最终状态),并且默认情况下保留所有数据。但是如果您运行的是短期前台进程,那么这些容器文件系统可能真的会堆积起来。如果你想要Docker自动清理容器并在容器退出时删除文件系统,你可以添加--rm标志。

在Docker命令行中调用可选命令:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
#这个命令是可选的,因为创建IMAGE的人可能已经使用Dockerfile CMD指令提供了一个默认命令。作为操作者(从image运行容器的人),您可以通过指定一个新的COMMAND来覆盖那个CMD指令。默认在镜像当中只会存在一个CMD,如果这里写命令的话,镜像当中的CMD就不会生效。如果镜像中也指定一个ENTRYPOINT,那么CMD或COMMAND生效的那一个将作为参数附加到ENTRYPOINT。

可以在运行时使用字符串指定新的ENTRYPOINT来覆盖默认的ENTRYPOINT

你可以通过传递一个空字符串来重置容器entrypoint,例如:

docker run -it --entrypoint="" mysql bash

这样上面的只有bash这个命令会生效。即传入--entrypoint将清除image上的任何默认命令设置(即Dockerfile中用于构建它的任何CMD指令)。

-p(小写)				#指定端口号 如: -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
-P(大写)				#大写P,随机指定端口
-e				#设置环境变量如:-e "foo=bar"

具名挂载和匿名挂载

#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#查看所有的volume的情况
docker volume ls
#得到的结果类似于
local			5f4a564ga565a1a315e1g312a31fe3515ga313d15eg16e7897g8gq
#上面这种挂载就属于匿名挂载,我们在-v中只写了容器内的路径,没有写容器外的路径
#具名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
docker volume ls
local			juming-nginx
#通过			-v 卷名:容器内路径		使用具名挂载
#查看这个卷
docker volume inspect juming-nginx

所有的docker容器内的卷,在没有指定宿主机目录的情况下,都是在/var/lib/docker/volumes/卷名/下,如果是具名挂载,卷名就是我们所用的卷名,如果是匿名挂载,则卷名是随机生成的一连串数字,因此大多数情况下会使用具名挂载,而不是匿名挂载。

#如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径			#匿名挂载
-v 卷名:容器内路径		  #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载

拓展

#通过 -v 容器内路径:ro  或者  rw 改变读写权限
ro		readonly		#只读
rw		readwrite		#可读可写
#一旦这个设置了容器权限,容器对我们挂载出来的内容就会有限制了
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
#ro说明这个路径只能通过宿主机来操作,容器内部是无法操作的,默认是rw
<think>好的,我现在需要回答用户关于如何通过docker run进入容器的具体命令及用法的问题。首先,我得回忆一下Docker的相关命令,特别是docker run的选项和参数。 用户提到之前提供的引用中提到了docker start和docker exec,但用户现在想用docker run直接进入容器。我需要确认docker run的正确用法,尤其是如何在启动容器时保持其运行并进入交互式终端。 记得docker run的基本语法是docker run [OPTIONS] IMAGE [COMMAND] [ARG...]。要让容器启动后进入交互式shell,常用的选项包括-i(保持STDIN打开)和-t(分配伪终端),组合起来就是-it。此外,如果想让容器在执行完命令后不退出,可能需要保持一个进程运行,比如/bin/bash。 例如,正确的命令可能是docker run -it IMAGE_NAME /bin/bash。这样会启动容器并立即进入bash shell。但需要注意,如果镜像的默认命令是立即退出的,比如某些只执行一次性任务的镜像,即使使用-it也可能无法保持运行。这时候可能需要覆盖默认的CMD或ENTRYPOINT。 另外,用户可能还需要了解一些常用的选项,比如--rm在容器退出后自动清理,或者--name指定容器名称。比如docker run -it --rm --name my_container ubuntu /bin/bash。这样启动的容器在退出后会被自动删除,适合临时测试。 还需要考虑用户可能遇到的常见问题,比如容器启动后立即退出。这时候应该检查镜像的默认命令,或者是否有必要的参数遗漏。例如,某些镜像可能需要特定的参数才能保持运行,或者需要后台服务,这时候可能需要结合其他命令。 最后,确保回答结构清晰,分步骤说明命令的各个部分,并提供示例,同时给出注意事项和常见问题解决方法。这样用户能够全面理解如何使用docker run进入容器,并处理可能遇到的问题。</think>### 通过 `docker run` 进入容器的具体命令及用法 #### 1. **基础命令格式** 使用 `docker run` 启动并直接进入容器的核心命令为: ```bash docker run -it [镜像名称] /bin/bash ``` - **`-i`**:保持标准输入(STDIN)开放,允许交互操作。 - **`-t`**:分配伪终端(TTY),使容器具备命令行界面。 - **`/bin/bash`**:指定容器启动后执行的命令(此处为启动 Bash Shell)[^1]。 #### 2. **完整示例** 以 Ubuntu 镜像为例: ```bash docker run -it ubuntu:latest /bin/bash ``` 执行后,会直接进入容器的 Bash 终端,显示类似: ```bash root@容器ID:/# ``` #### 3. **常用附加选项** - **`--rm`**:容器退出后自动删除(适合临时测试): ```bash docker run -it --rm ubuntu /bin/bash ``` - **`--name`**:指定容器名称(便于后续管理): ```bash docker run -it --name my_container ubuntu /bin/bash ``` - **`-v`**:挂载主机目录到容器: ```bash docker run -it -v /宿主机路径:/容器路径 ubuntu /bin/bash ``` #### 4. **注意事项** - **镜像默认命令**:若镜像的 `CMD` 或 `ENTRYPOINT` 是单次任务(如 `echo "done"`),容器会立即退出。需覆盖默认命令: ```bash docker run -it nginx /bin/bash # 覆盖默认的 nginx 启动命令 ``` - **后台服务容器**:若需运行后台服务(如 Nginx),可先启动服务再进入: ```bash docker run -d --name webserver nginx # 后台运行 docker exec -it webserver /bin/bash # 进入已运行容器 ``` #### 5. **常见问题** - **容器启动后立即退出**: - 检查是否遗漏 `-it` 参数。 - 确认镜像是否包含持久化进程(如 `tail -f /dev/null`)。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值