docker run
创建并启动一个新容器
语法
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
参数
| 参数 | 说明 | 示例 | 级别 |
|---|---|---|---|
-d --detach |
后台运行容器 | docker run -d nginx |
常用 |
-p --publish |
映射端口(主机:容器) | docker run -p 8080:80 nginx |
常用 |
--name |
指定容器名称 | docker run --name my-app nginx |
常用 |
-e --env |
设置环境变量 | docker run -e NODE_ENV=production node |
常用 |
-v --volume |
挂载卷(主机路径:容器路径) | docker run -v /data:/app/data nginx |
常用 |
--rm |
容器停止后自动删除 | docker run --rm alpine echo hello |
常用 |
-it |
交互式终端模式 | docker run -it ubuntu bash |
常用 |
--network |
指定网络 | docker run --network my-net nginx |
进阶 |
--restart |
重启策略 | docker run --restart=always nginx |
进阶 |
示例
后台运行 Nginx 并映射端口
docker run -d -p 8080:80 --name web nginx
访问 localhost:8080 即可看到 Nginx 默认页面
运行临时容器执行命令
docker run --rm alpine cat /etc/os-release
执行完自动删除容器
挂载本地目录开发
docker run -d -p 3000:3000 -v $(pwd):/app -w /app node:18 npm start
本地代码变更实时生效
传入环境变量运行
docker run -d -e MYSQL_ROOT_PASSWORD=secret -p 3306:3306 mysql:8
通过环境变量配置数据库密码
常见错误
docker: Error response from daemon: Conflict. The container name is already in use
容器名已存在,用 docker rm 删除旧容器或换一个名字
docker: Error response from daemon: driver failed programming external connectivity: port is already allocated
端口被占用,换一个主机端口或停止占用该端口的进程
Unable to find image 'xxx' locally
镜像不存在,检查镜像名和标签是否正确,或先 docker pull
技巧
- 生产环境建议加 --restart=unless-stopped 保证容器自动重启
- 用 --rm 运行临时任务避免残留容器
- 多个 -e 可以传多个环境变量,或用 --env-file 从文件读取