【Docker】Docker run reference

官方文档传送门

Docker 运行参考

Docker run reference

Detached vs foreground

启动 Docker 容器时,首先要决定是要在后台以“分离”模式还是默认前台模式运行容器:

-d=false: Detached mode: Run container in the background, print new container id

detached (-d)

要以分离模式启动容器,您可以使用-d=true或只是-d选项。按照设计,当用于运行容器的根进程退出时,容器以分离模式启动,除非您还指定了该--rm选项。如果使用 -d with --rm,则在容器退出或守护程序退出时(以先发生者为准)将移除容器。

不要将service x start命令传递给分离的容器。例如,此命令尝试启动nginx服务。

$ docker run -d -p 80:80 my_image service nginx start

成功地启动nginx了容器内的服务。然而,它在分离容器范式中失败了,根进程 ( service nginx start) 返回,分离容器按设计停止。结果,该 nginx服务已启动但无法使用。相反,要启动诸如nginx Web 服务器之类的进程,请执行以下操作:

$ docker run -d -p 80:80 my_image nginx -g 'daemon off;'

要使用分离的容器进行输入/输出,请使用网络连接或共享卷。这些是必需的,因为容器不再侦听docker run运行的命令行。

重新附加到分离的容器,请使用docker attach命令。

Foreground

在前台模式下(-d未指定时的默认值),docker run可以在容器中启动进程并将控制台附加到进程的标准输入、输出和标准错误。它甚至可以伪装成 TTY(这是大多数命令行可执行文件所期望的)并传递信号。所有这些都是可配置的:

在计算中,tty是Unix和类Unix操作系统中的命令,用于打印连接到标准输入的终端的文件名。tty代表TeleTYpewriter。

-a=[]           : Attach to `STDIN`, `STDOUT` and/or `STDERR`
-t              : Allocate a pseudo-tty
--sig-proxy=true: Proxy all received signals to the process (non-TTY mode only)
-i              : Keep STDIN open even if not attached

如果您未指定,-a则 Docker 将附加到 stdoutstderr 。您可以指定要连接到三个标准流 ( STDIN, STDOUT, STDERR) 中的哪一个,如下所示:

$ docker run -a stdin -a stdout -i -t ubuntu /bin/bash

对于交互式进程(如 shell),您必须-i -t一起使用才能为容器进程分配一个 tty-i -t通常-it 如您将在后面的示例中看到的那样编写。-t当客户端从管道接收其标准输入时,禁止指定,如下所示:

$ echo test | docker run -i busybox cat

在容器内作为 PID 1 运行的进程被 Linux 特殊对待:它忽略任何具有默认操作的信号。 因此,进程不会在 SIGINTSIGTERM 上终止,除非它被编码为这样做。

Container identification

Name (–name)

The operator can identify a container in three ways:

Identifier typeExample value
UUID long identifier“f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778”
UUID short identifier“f78375b1c487”
Name“evil_ptolemy”

UUID 标识符来自 Docker daemon。 如果您没有使用 --name 选项分配容器名称,那么守护程序会为您生成一个随机字符串名称。 定义名称是一种为容器添加含义的便捷方式。 如果指定名称,则可以在 Docker 网络中引用容器时使用它。 这适用于后台和前台 Docker 容器。

  • Note

默认桥接网络上的容器必须链接以通过名称进行通信。

PID equivalent

最后,为了帮助实现自动化,您可以让 Docker 将容器 ID 写入您选择的文件中。 这类似于某些程序可能会将其进程 ID 写入文件的方式(您已经将它们视为 PID 文件):

--cidfile="": Write the container ID to the file

Image[:tag]

虽然严格来说这不是一种识别容器的方法,但您可以通过在命令中添加 image[:tag] 来指定要用于运行容器的镜像版本。 例如,docker 运行 ubuntu:14.04。

Image[@digest]

使用 v2 或更高版本图像格式的图像具有称为摘要的内容可寻址标识符。 只要用于生成图像的输入不变,摘要值就是可预测和可参考的。

以下示例使用

sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0 

digest:

$ docker run alpine@sha256:9cacb71397b640eca97488cf08582ae4e4068513101088e9f96c9814bfda95e0 date

PID settings (–pid)

--pid=""  : Set the PID (Process) Namespace mode for the container,
             'container:<name|id>': joins another container's PID namespace
             'host': use the host's PID namespace inside the container

默认情况下,所有容器都启用了 PID 命名空间。

PID 命名空间提供进程分离。PID 命名空间移除了系统进程的视图,并允许重用进程 ID,包括 pid 1

在某些情况下,您希望容器共享主机的进程命名空间,基本上允许容器内的进程查看系统上的所有进程。例如,您可以使用 stracegdb 等调试工具构建容器,但希望在调试容器内的进程时使用这些工具

示例:在容器内运行 htop

创建此 Dockerfile:

FROM alpine:latest
RUN apk add --update htop && rm -rf /var/cache/apk/*
CMD ["htop"]

构建 Dockerfile 并将图像标记为 myhtop:

$ docker build -t myhtop .

使用以下命令在容器内运行 htop:

$ docker run -it --rm --pid=host myhtop
加入另一个容器的 pid 命名空间可用于调试该容器。

例子

启动一个运行 redis 服务器的容器:

$ docker run --name my-redis -d redis

通过运行另一个包含 strace 的容器来调试 redis 容器:

$ docker run -it --pid=container:my-redis my_strace_docker_image bash
$ strace -p 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
docker run是用于创建一个新的容器并运行一个命令的指令。通过docker run指令可以设置许多参数来定制容器的行为。 其中一个常用的参数是-d,它表示以后台模式运行容器,即容器会在后台运行而不会阻塞命令行终端。可以使用--name参数为容器指定一个名称,并使用--restart参数设置容器Docker重启后自动启动。例如,可以使用以下命令创建一个名为jenkins2的容器,并在Docker重启后自动启动: docker run -d --name jenkins2 --restart always jenkins/jenkins 另一个常用的参数是-p,它用于将容器的端口映射到主机的端口。可以使用三种不同的写法来设置端口映射。一种写法是指定主机的IP地址、主机的端口和容器的端口;另一种写法是只指定主机的端口和容器的端口;第三种写法是只指定容器的端口。例如,以下是三种写法的实际例子: docker run -p ip:主机端口:容器端口 docker run -p 主机端口:容器端口(常用) docker run -p 容器端口 这些是docker run指令的一些常用参数和用法。你可以根据需要选择适合的参数来创建和定制容器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Docker命令总结:run](https://blog.csdn.net/qq_47346664/article/details/119887657)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【Docker系列】从头学起 Docker——docker run 命令详解](https://blog.csdn.net/qq_45547688/article/details/125785419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值