关于docker启动不了如何重新安装而不会删除现有镜像和容器

  1. 先备份一下docker的内容防止安装后被清除
cd /var/lib
mkdir /var/lib/docker1
cp -rf docker/* /var/lib/docker1/
  1. 删除docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine
  1. 使用脚本安装docker并启动
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
sudo systemctl enable docker
sudo systemctl start docker
  1. 查看容器都在,但是启动报错了
    在这里插入图片描述
  2. 执行以下命令重新启动docker
grep -rl 'docker-runc' /var/lib/docker/containers/ | xargs sed -i 's/docker-runc/runc/g'
systemctl stop docker
systemctl start docker
  1. 再启动容器就正常了
    在这里插入图片描述

  2. 如果要换目录,需要修改/lib/systemd/system/docker.service
    在这里插入图片描述

  3. 重启docker

systemctl daemon-reload
 
systemctl restart docker
<think>好的,我现在需要帮助用户了解如何使用Docker命令将镜像启动容器。首先,我应该回忆一下Docker的基本命令结构,用户之前提供的引用内容里有相关的信息,比如引用[2]提到了启动、停止Docker服务的命令,以及镜像容器相关的操作。 用户的问题是如何将镜像启动容器,所以核心应该是`docker run`命令。根据引用[2]中的内容,帮助命令可以通过`docker run --help`来查看,这可能是一个起点。然后引用[3]里有一个例子,使用Dockerfile定义镜像,并通过CMD指定启动命令。过用户现在的问题是创建镜像,而是运行现有镜像。 接下来,我需要整理运行容器的基本步骤。首先,确保Docker已经安装并运行,引用[2]中的启动命令可能相关,比如`systemctl start docker`。过用户可能已经安装好了,所以重点在运行容器。 基本命令结构是`docker run [选项] 镜像名 [命令]`。选项部分有很多参数,比如-d后台运行,-p端口映射,-v卷挂载,--name容器命名等。例如,`docker run -d -p 8080:80 --name mycontainer nginx`这样的命令。需要解释这些选项的作用。 还需要考虑是否需要交互式终端,比如使用-it选项来进入容器,比如`docker run -it ubuntu /bin/bash`。这时候容器启动并进入bash shell。 另外,可能需要提到如何查看正在运行的容器,使用`docker ps`,以及查看所有容器(包括停止的)`docker ps -a`。这有助于用户确认容器是否成功启动。 用户可能遇到的常见问题,比如端口冲突、容器名称重复,如何处理。例如,如果端口已经被占用,需要更改映射端口或者停止原有容器。名称重复的话,可以删除容器或者使用同的名称。 另外,可能需要提到如何传递环境变量,使用-e选项,比如`docker run -e ENV_VAR=value ...`,这对于配置应用程序很有用。 还要注意,如果镜像存在本地,Docker会自动从仓库拉取,但用户可能需要先使用`docker pull`来获取镜像,或者直接运行时会自动拉取。 总结步骤的话,大致是:1. 确认镜像存在;2. 使用docker run命令,添加必要的选项参数;3. 验证容器是否运行。 同时,根据引用[3]中的例子,CMD指令在Dockerfile中定义了默认的启动命令,但用户可以在run时覆盖这个命令,比如`docker run myimage java -jar app.jar`,过如果Dockerfile里已经有CMD,可能需要。 需要确保命令语法正确,比如选项的顺序,参数的位置是否正确。比如`-p`后面跟的是主机端口:容器端口,卷挂载是主机目录:容器目录。 可能还需要提醒用户关于数据持久化的问题,如果容器删除后数据丢失,建议使用卷或者绑定挂载来保存数据。 最后,应该给出几个具体的例子,涵盖常见的使用场景,让用户更容易理解。例如运行Nginx、MySQL等镜像的具体命令,并解释每个参数的作用。 可能还需要提到后台运行前台运行的区别,使用-d选项让容器在后台运行,否则终端会被占用。如果想查看日志,可以使用`docker logs`命令。 总之,回答需要结构清晰,分步骤说明,给出具体命令示例,并解释各个选项的含义,帮助用户理解如何正确使用docker run命令启动容器。</think>### 如何将Docker镜像启动容器 #### 步骤说明 1. **确认Docker服务已启动** 使用以下命令确保Docker服务处于运行状态: ```bash systemctl status docker ``` 若未启动,执行 `systemctl start docker`[^2]。 2. **查看本地镜像列表** 使用 `docker images` 命令查看已下载的镜像,确认目标镜像名称及标签: ```bash docker images ``` 输出示例: ``` REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest abcdef123456 2 days ago 133MB ``` 3. **启动容器的基本命令** 使用 `docker run` 命令启动镜像容器,语法为: ```bash docker run [选项] <镜像名>:<标签> ``` **常用选项**: - `-d`:后台运行容器(分离模式) - `-p`:端口映射(格式:`主机端口:容器端口`) - `--name`:为容器指定名称 - `-v`:数据卷挂载(格式:`主机目录:容器目录`) - `-e`:设置环境变量 - `-it`:以交互模式启动容器(通常与 `/bin/bash` 结合使用) 4. **示例场景** - **后台运行Nginx容器**: ```bash docker run -d -p 8080:80 --name my_nginx nginx:latest ``` 此命令将启动一个名为 `my_nginx` 的容器,并将主机的8080端口映射到容器的80端口[^2]。 - **交互式运行Ubuntu容器**: ```bash docker run -it ubuntu:20.04 /bin/bash ``` 启动后可直接在容器内执行命令,退出时输入 `exit`。 - **带环境变量数据卷的MySQL容器**: ```bash docker run -d --name mysql_db -e MYSQL_ROOT_PASSWORD=123456 -v /data/mysql:/var/lib/mysql mysql:8.0 ``` 此命令设置了MySQL的root密码,并将主机的 `/data/mysql` 目录挂载到容器中以实现数据持久化[^3]。 5. **验证容器状态** 使用 `docker ps` 查看运行中的容器: ```bash docker ps ``` 查看所有容器(包括已停止的): ```bash docker ps -a ``` #### 常见问题处理 - **端口冲突**:若主机端口被占用,修改 `-p` 参数的主机端口值(如 `-p 8081:80`)。 - **容器名称重复**:使用 `--name` 时需确保名称唯一,或先删除容器:`docker rm 容器名`。 - **镜像存在**:若本地无镜像Docker会尝试从仓库拉取,也可手动拉取:`docker pull 镜像名:标签`。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值