`docker run`应该是我们日常使用docker中最常用,也最重要的命令。 命令格式如下: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] ## [](http://notes.maxwi.com/2017/12/21/docker-run/#OPTIONS "OPTIONS")OPTIONS 现在的docker版本(17.09.1-ce)中run有很多可以选择的参数,用到再记录,以下是网上看到针对1.12的版本。 加粗的地方表示比较常用 **`-d, --detach=false`指定容器运行于前台还是后台,默认为false** **`-i, --interactive=false`打开STDIN,用于控制台交互** **`-t, --tty=false`分配tty设备,该可以支持终端登录,默认为false** `-u, --user=""`指定容器的用户 `-a, --attach=[]`登录容器(必须是以docker run -d启动的容器) `-w, --workdir=""`指定容器的工作目录 `-c, --cpu-shares=0`设置容器CPU权重,在CPU共享场景使用 `-e, --env=[]`指定环境变量,容器中可以使用该环境变量 `-m, --memory=""`指定容器的内存上限 `-P, --publish-all=false`指定容器暴露的端口 **`-p, --publish=[]`指定容器暴露的端口** `-h, --hostname=""`指定容器的主机名 **`-v, --volume=[]`给容器挂载存储卷,挂载到容器的某个目录** `--volumes-from=[]`给容器挂载其他容器上的卷,挂载到容器的某个目录 `--cap-add=[]`添加权限 `--cap-drop=[]`删除权限 `--cidfile=""`运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法 `--cpuset=""`设置容器可以使用哪些CPU,此参数可以用来容器独占CPU `--device=[]`添加主机设备给容器,相当于设备直通 `--dns=[]`指定容器的dns服务器 `--dns-search=[]`指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件 `--entrypoint=""`覆盖image的入口点 `--env-file=[]`指定环境变量文件,文件格式为每行一个环境变量 `--expose=[]`指定容器暴露的端口,即修改镜像的暴露端口 `--link=[]`指定容器间的关联,使用其他容器的IP、env等信息 `--lxc-conf=[]`指定容器的配置文件,只有在指定–exec-driver=lxc时使用 **`--name=""`指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字** `--net="bridge"`容器网络设置: bridge 使用docker daemon指定的网桥 host //容器使用主机的网络 container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源 none 容器使用自己的网络(类似--net=bridge),但是不进行配置 `--privileged=false`指定容器是否为特权容器,特权容器拥有所有的capabilities `--restart="no"`指定容器停止后的重启策略: no:容器退出时不重启 on-failure:容器故障退出(返回值非零)时重启 always:容器退出时总是重启 `--rm=false`指定容器停止后自动删除容器(不支持以docker run -d启动的容器) `--sig-proxy=true`设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理 ## [](http://notes.maxwi.com/2017/12/21/docker-run/#%E5%B8%B8%E7%94%A8%E5%9C%BA%E6%99%AF "常用场景")常用场景 **后台运行一个容器用于开发** ``` docker run -itd --name dev -v ~/data:/root/data -p 1080:80 <image> /bin/bash ``` 然后通过以下命令连接: docker exec -it dev /bin/bash **让容器自动运行命令并在命令停止后自动重启后执行** docker run -d --restart=always <image> ping docker.com **后台运行数据库容器并使用服务容器进行连接** 数据库容器,本机数据库目录将挂载到容器中: docker run -d --name=server-db --restart=always -v /server/mysql-data:/mysql-data <image> /usr/bin/mysql_safe -d 服务容器,在服务容器中将可以直接通过server-db来访问数据库容器,并开放80端口给公网 docker run -d --name=server-http --restart=always --link=server-db -p 8080:80 <image> /usr/bin/httpd --DFOREGROUND **让容器运行一个命令后自动删除** docker run --rm python:2.7-slim python --version **交互式运行python之后,当退出python交互时容器自动删除** docker run -it --rm python:2.7-slim python ## [](http://notes.maxwi.com/2017/12/21/docker-run/#%E5%8F%82%E8%80%83 "参考")参考 1. [http://notes.maxwi.com/2017/12/21/docker-run/](http://notes.maxwi.com/2017/12/21/docker-run/)