Docker的run命令

Docker的run命令

介绍

https://docs.docker.com/engine/reference/commandline/run/

创建、启动容器并执行相应的命令。

在新的容器中运行命令。

docker run命令首先在指定的镜像上创建一个可写容器层,然后使用指定的命令启动它。 也就是说,docker run相当于API /containers/create/containers/(id)/start。 可以使用 docker start 重新启动已停止的容器,并使其先前的所有更改保持不变。 请参阅 docker ps -a 以查看所有容器的列表。

docker run 命令可与 docker commit 结合使用,以更改容器运行的命令。

更多资料:

使用

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

和 docker create 命令相同。

常用的命令行参数:

参数 描述
–attach , -a Attach to STDIN, STDOUT or STDERR
–env , -e Set environment variables
–env-file Read in a file of environment variables
–expose Expose a port or a range of ports
--hostname , -h Container host name
–interactive , -i Keep STDIN open even if not attached
–label , -l Set meta data on a container
–label-file Read in a line delimited file of labels
–mount Attach a filesystem mount to the container
–name Assign a name to the container
–publish , -p Publish a container’s port(s) to the host
–read-only Mount the container’s root filesystem as read only
–rm Automatically remove the container when it exits
–tty , -t Allocate a pseudo-TTY
–user , -u Username or UID (format: <name|uid>[:<group|gid>])
–volume , -v Bind mount a volume
–volumes-from Mount volumes from the specified container(s)
–workdir , -w Working directory inside the container

分配名字和伪TTY (–name, -it)

$ docker run --name test -it debian

连接到STDIN/STDOUT/STDERR (-a)

-a标志告诉 docker run 绑定到容器的STDIN,STDOUT或STDERR。 这使得可以根据需要操纵输出和输入。

$ docker run -a stdout ubuntu echo test
test

完整容器能力 (–privileged)

特权容器?

默认情况下,大多数潜在危险的内核功能都会被删除; 包括 cap_sys_admin(挂载文件系统所需)。 但是,–privileged标志将允许它运行。

$ docker run -t -i --privileged ubuntu bash

--privileged 标志为容器提供了所有功能,它还解除了设备cgroup控制器强制执行的所有限制。 换句话说,容器几乎可以完成主机可以执行的所有操作。 此标志存在以允许特殊用例,例如在Docker中运行Docker。

设置工作目录 (-w)

$ docker  run -w /path/to/dir/ -i -t  ubuntu pwd
/path/to/dir

-w 允许命令在给定的目录中执行,这里是 /path/to/dir/。 如果路径不存在,则在容器内创建。

挂载卷 (-v, –read-only)

docker  run  -v `pwd`:`pwd` -w `pwd` -i -t  ubuntu pwd

-v标志将当前工作目录挂载到容器中。 -w 让命令在当前工作目录中执行,方法是将工作目录更改为pwd返回的值。所以这个组合使用容器执行命令,但在当前工作目录中。

发布或者暴露端口 (-p, –expose)

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

这将容器的端口8080绑定到主机的127.0.0.1上的TCP端口80。还可以指定udp和sctp端口。

docker run --expose 80 ubuntu bash

这会暴露容器的端口80,而不会将端口发布到主机系统接口。

设置环境变量(-e, –env, –env-file)

可以通过-e, --env, --env-file 设置容器的环境变量:

docker run -e MYVAR1 --env MYVAR2=foo --env-file ./env.list ubuntu bash

本地已经export的环境变量,可以不用=号和值:

export VAR1=value1
export VAR2=value2

$ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR
VAR1=value1
VAR2=value2

在容器上设置元数据(-l, –label, –label-file)

可以通过-l, --label, --label-file 设置容器的label:

$ docker run -l my-label --label com.example.foo=bar ubuntu bash

将容器连接到网络(–network)

docker run -itd --network=my-net busybox
docker run -itd --network=my-net --ip=10.10.9.75 busybox

也可以使用 docker connect 命令

从容器挂载卷(–volumes-from)

docker run --volumes-from 777f7dc92da7 --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd