在 Docker 中启动容器是一个基础但关键的操作,以下是详细步骤和常见场景的说明:
docker run [OPTIONS] IMAGE [COMMAND]
示例:启动一个一次性交互式 Ubuntu 容器
docker run -it --rm ubuntu /bin/bash
-it
:分配交互式终端(-i
交互模式,-t
伪终端)--rm
:退出后自动删除容器(测试时常用)ubuntu
:镜像名称(本地不存在时会自动拉取)/bin/bash
:覆盖默认的启动命令docker run -d --name my_nginx nginx
-d
:后台运行(detached 模式)--name
:指定容器名称(否则 Docker 会随机生成)将容器内部端口映射到宿主机:
docker run -d -p 8080:80 --name web nginx
-p 8080:80
:宿主机 8080 端口 → 容器的 80 端口持久化容器数据或共享宿主机目录:
docker run -d -v /宿主机路径:/容器路径 --name mysql_db mysql
-v
:卷挂载(也可用 --mount
,语法更明确)docker run -e "MYSQL_ROOT_PASSWORD=123456" -d mysql
-e
:设置环境变量(常用于配置服务参数)限制容器内存和 CPU:
docker run -d --memory="1g" --cpus="0.5" --name limited_container nginx
docker start [容器名/ID]
区别:
- docker run
:创建新容器(每次执行都会生成新实例)
- docker start
:重启已存在的停止状态容器
bash
docker ps
bash
docker ps -a
bash
docker stop [容器名/ID]
docker rm [容器名/ID]
端口冲突:
错误 Bind for 0.0.0.0:8080 failed: port is already allocated
→ 更换宿主机端口或停止占用端口的服务。
容器立即退出:
nginx
需以前台模式运行)。tail -f /dev/null
保持运行。权限问题:
添加 --privileged
或调整 SELinux/AppArmor 配置(生产环境慎用)。
docker-compose
:通过 YAML 文件定义多容器服务(推荐用于复杂应用)。bash
docker logs -f [容器名]
如果需要更具体的场景(如网络配置、多容器互联等),可以进一步说明需求!