🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] > [docker run 手册](https://docs.docker.com/engine/reference/commandline/run/) ## 概述 操作员可以覆盖Docker运行时本身设置的几乎所有默认设置。操作员具有覆盖映像和Docker运行时默认值的能力 ## 语法 ``` docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] options: // Foreground -a=[] : 附加到STDIN,STDOUT或STDERR --tty , -t : 分配伪TTY --interactive , -i : 即使未连接STDIN也保持打开状态 // 如 docker run -a stdin -a stdout -i -t ubuntu /bin/bash // 容器身份 --name : 容器名称 // 网络设置 --dns=[] : 为容器设置自定义dns服务器 默认情况下,您的容器将使用与主机相同的DNS服务器 --network="bridge" : 将容器连接到网络(default) 'none' : 没有网络 'container:<name|id>': 重用另一个容器的网络堆栈 'host' : 使用Docker主机网络栈 '<network-name>|<network-id>': 连接到用户定义的网络 --network-alias=[] : 为容器添加网络范围的别名 --add-host="" : 添加自定义主机到IP的映射(host:ip) --mac-address="" : 设置容器的以太网设备的MAC地址 --ip="" : 设置容器的以太网设备的IPv4地址 --ip6="" : 设置容器的以太网设备的IPv6地址 --link-local-ip=[] : 设置一个或多个容器的以太网设备的链接本地IPv4/IPv6地址 // 重新启动策略 --restart="no" : 退出时不要自动重启容器。这是默认值 ="on-failure[:max-retries]" : 仅当容器以非零退出状态退出时,才重新启动 ="always" : 无论退出状态如何,请始终重新启动容器 // 如 docker run --restart=on-failure:10 redis // 清理 --rm=false : 当容器退出时自动删除它(默认 false) Docker也将删除与该容器关联的匿名卷 // 资源约束运行 -m, --memory="" : 内存限制(单位:b,k,m,或g),如 4m -c, --cpu-shares=0 : CPU份额 --cpus=0.000 : CPU数量。数字是小数。0.000表示没有限制 // 运行时特权和Linux功能 --privileged :赋予此容器扩展的特权 // 覆盖Dockerfile映像默认值 --entrypoint : 在运行时执行的默认命令 // 如: docker run -it --entrypoint /bin/bash example/redis // 如: docker run -it --entrypoint="" mysql bash // 暴露 --expose=[] : 公开容器内的一个或多个端口。 -P : 将所有公开的端口发布到主机接口 -p=[] : 将容器的端口或端口范围发布到主机 如 -p 88:80 或 -p 1234-1236:1234-1236/tcp 或 -p 127.0.0.1:80:8080/tcp --link="" : 添加链接到另一个容器 (<name or id>:alias or <name or id>) // ENV(环境变量) // 创建Windows容器时,Docker不会设置任何环境变量 -e ,--env : 设置环境变量 , 如 "-e PATH" or "-e foo=bar" --env-file 文件 : 导入文件名 // VOLUME(共享文件系统) -v, --volume=[host-src:]container-dest[:<[rw|ro], [z|Z]>]: 绑定挂载卷 // 指定用户 -u="", --user="" : 设置指定命令所使用的用户名或UID,root(id = 0)是容器中的默认用户 // 工作目录 // 在容器中运行二进制文件的默认工作目录是根目录(/) --workdir , -w="" : 容器内的工作目录 // ulimit --ulimit :Ulimit选项 <type>=<soft limit>[:<hard limit>] // HEALTHCHECK --health-cmd Command to run to check health --health-interval Time between running the check --health-retries Consecutive failures needed to report unhealthy --health-timeout Maximum time to allow one check to run --health-start-period Start period for the container to initialize before starting health-retries countdown --no-healthcheck Disable any container-specified HEALTHCHECK ``` ## 示例 ### 完整的容器功能(特权)(--privileged) ``` docker run -t -i --privileged ubuntu bash ``` ### 特权启用systemctl (--privileged) ``` docker run -itd --name centos_7 -p 88:80 --privileged centos:7 init ``` ### 启动redis (-d) ``` docker run --name my-redis -d redis ``` ### 容器连接到同一网络(--network) 可以将多个容器连接到同一网络。一旦连接到用户定义的网络,这些容器就可以仅使用另一个容器的IP地址或名称轻松进行通信 ``` docker network create -d bridge my-net docker run -itd --network=my-net --ip=10.10.9.75 busybox ``` ### 三种方式设置环境变量 (--env ,--env-file) 三种方式来改变环境变量 方式一:参数导入 ``` $ docker run --env VAR1=value1 --env VAR2=value2 ubuntu env | grep VAR VAR1=value1 VAR2=value2 ``` 方式二:读取主机环境变量 ``` $ export VAR1=value1 $ export VAR2=value2 $ docker run --env VAR1 --env VAR2 ubuntu env | grep VAR VAR1=value1 VAR2=value2 ``` 方式三:文件导入 ``` $ cat env.list # This is a comment VAR1=value1 VAR2=value2 $ docker run --env-file env.list ubuntu env | grep VAR VAR1=value1 VAR2=value2 ``` ### 设置工作目录 (-w) ``` docker run -w /path/to/dir/ -i -t ubuntu pwd ``` 如果路径不存在,则会在容器内创建该路径 ### 挂载数据卷(--mount or --volume) 挂载可以使用 `--mount` 或 `--volume`,官方中推荐使用 --mount,但是 --volume 比较流行 ``` //创建卷 > docker volume create my-vol // 使用 --mount > docker run -d -P --name web --mount source=my-vol,target=/usr/share/nginx/html nginx:alpine // or 使用 --volume > docker run -d -P --name web -v my-vol:/usr/share/nginx/html nginx:alpine ``` ### 挂载主机目录(--mount or -volume) ``` // 使用 --mount > docker run -d -P --name web --mount ype=bind,source=/src/webapp,target=/usr/share/nginx/html nginx:alpine // or 使用 --volume > docker run -d -P --name web -v /src/webapp:/usr/share/nginx/html nginx:alpine ``` ### 挂载只读主机目录(--mount or -volume) ``` // 使用 --mount > docker run -d -P --name web --mount ype=bind,source=/src/webapp,target=/usr/share/nginx/html,readonly nginx:alpine // or 使用 --volume > docker run -d -P --name web -v /src/webapp:/usr/share/nginx/html:ro nginx:alpine ``` ### 设置容器的存储大小为120G ``` docker run -it --storage-opt size=120G fedora /bin/bash ``` ### 在容器上设置元数据(-l,--lable) ``` $ docker run -l my-label --label com.example.foo=bar ubuntu bash ``` ### 重新启动策略(--restart) ``` docker run --restart=always redis ``` ### 容器链接到另一个redis容器 (--network) ``` > docker run -d --name redis example/redis --bind 127.0.0.1 // --privilegeduse the redis container's network stack to access localhost > docker run --rm -it --network container:redis example/redis-cli -h 127.0.0.1 ``` ### 容器可访问主机(--add-host) ``` > docker run -it --rm --add-host=docker:192.168.0.229 centos:7 [root@localhost ~]# ping docker PING docker (192.168.0.229) 56(84) bytes of data. 64 bytes from docker (192.168.0.229): icmp_seq=1 ttl=64 time=0.108 ms ``` ### 在容器中设置ulimit(--ulimit) ``` docker run --ulimit nofile=1024:1024 --rm debian sh -c "ulimit -n" ```