docker中run和exec有什么区别示例详解

 更新时间:2025年03月17日 10:42:20   作者:蘋天纬地  
这篇文章主要介绍了docker中run和exec有什么区别的相关资料,docker run`用于创建并启动新容器,而docker exec用于在已运行容器中执行命令,前者适用于启动新服务,后者适用于调试和管理运行中的容器,需要的朋友可以参考下

docker run 和 docker exec 都是 Docker 中用来与容器交互的命令,但它们的用途和行为有很大的不同。下面我会详细解释它们之间的区别。

1. docker run

docker run 命令用于 创建并启动一个新的容器,并且可以运行一个命令或指定一个程序。每次使用 docker run 时,都会从镜像创建一个新的容器实例。

用法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

特点:

  • 创建并启动容器docker run 会启动一个新的容器实例,基于指定的镜像。
  • 运行一个命令:你可以指定一个命令来在容器中运行(如果没有指定命令,则会运行镜像的默认命令,通常是镜像中定义的 ENTRYPOINT 或 CMD)。
  • 可以传递参数:可以为容器指定参数(如挂载卷、设置环境变量、端口映射等)。
  • 容器生命周期:运行完指定的命令后,容器会退出,除非你通过某些方式让容器在后台运行(如使用 -d 参数)。

示例:

  • 启动一个 Ubuntu 容器,并在容器内运行 Bash shell:

    docker run -it ubuntu bash
    
  • 启动一个容器并运行一个后台应用(如 Nginx):

    docker run -d -p 80:80 nginx
    
  • 启动一个容器并挂载一个卷:

    docker run -v /host/path:/container/path ubuntu
    

2. docker exec

docker exec 命令用于 在正在运行的容器中执行一个命令。这不会创建新的容器,而是作用于已启动的容器。

用法:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

特点:

  • 在现有容器中执行命令docker exec 允许你在一个已经在运行的容器中执行新的命令。
  • 不会重新创建容器:你可以多次在同一个容器内执行不同的命令。
  • 交互式执行:通常使用 -it 选项来执行交互式命令(如进入容器的 shell)。
  • 容器保持运行:使用 docker exec 不会影响容器的运行状态,容器会继续运行并执行其原本的任务。

示例:

  • 进入一个运行中的容器,启动一个交互式 Bash shell:

    docker exec -it <container_id_or_name> bash
    
  • 在运行中的容器内执行一个简单的命令:

    docker exec <container_id_or_name> ls /usr
    
  • 在容器内运行一个后台进程:

    docker exec -d <container_id_or_name> some_command
    

3. 主要区别

特性docker rundocker exec
容器生命周期每次运行时都会创建一个新的容器在已有的容器中执行命令,不会创建新容器
用途启动一个新的容器并运行命令/程序在已运行的容器内执行命令
交互性可以使用 -it 选项进行交互式运行容器使用 -it 选项可以交互式进入容器,但容器已在运行
容器状态容器在命令执行完成后会退出(除非使用后台模式)容器会保持运行,命令执行完后容器继续运行
创建容器会创建一个新的容器并启动不会创建新容器,只对现有容器操作
适用场景适用于启动应用、服务、进程或临时任务适用于调试、管理或监控正在运行的容器

4. 何时使用 docker run 和 docker exec

  • 使用 docker run

    • 当你需要从一个镜像启动一个新的容器,并运行某个命令时。
    • 如果容器没有运行,你需要使用 docker run 来创建并启动容器。
    • 启动一个新的服务或应用。
  • 使用 docker exec

    • 当容器已经在运行时,你需要进入容器进行调试、查看日志、执行一些命令或修改容器内的配置。
    • 在一个已经启动的容器中进行实时操作,而不影响容器的生命周期。

附:docker exec执行多个命令详解

docker exec命令能够在运行着的容器中执行命令。docker exec命令的使用格式:

docker exec [OPTIONS] container_name COMMAND [ARG...]

OPTIONS说明:

  • -d,以后台方式执行命令;
  • -e,设置环境变量
  • -i,交互模式
  • -t,设置TTY
  • -u,用户名或UID,例如myuser:myusergroup

通常COMMAND只能是一条语句,为了支持多个命令的执行,需要将多个命令连接起来交给Shell,docker exec命令的使用示例如下:

sudo docker exec myContainer bash -c "cd /home/myuser/myproject && git fetch ssh://gerrit_server:29418/myparent/myproject ${GERRIT_REFSPEC} && git checkout FETCH_HEAD";
sudo docker exec myContainer bash -c "cd /home/myuser/myproject;git fetch ssh://gerrit_server:29418/myparent/myproject ${GERRIT_REFSPEC};git checkout FETCH_HEAD";

注意:对于已经暂停或停止了的容器,无法执行docker exec命令,如下将抛出异常:

docker pause myContainer 
docker exec myContainer ...

总结

  • docker run 用来创建和启动一个新的容器,并执行指定的命令。
  • docker exec 用来在已经运行的容器内执行命令,可以多次对一个容器执行操作。

到此这篇关于docker中run和exec有什么区别的文章就介绍到这了,更多相关docker run和exec区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker部署mysql 9.0.1的实现

    docker部署mysql 9.0.1的实现

    本文主要介绍了docker部署mysql 9.0.1的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • 详解docker容器分配静态IP

    详解docker容器分配静态IP

    这篇文章主要介绍了详解docker容器分配静态IP,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • docker启动报错问题OCI runtime create failed: container_linux.go:380: starting container process

    docker启动报错问题OCI runtime create failed: c

    这篇文章主要介绍了docker启动报错问题OCI runtime create failed: container_linux.go:380: starting container process,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • docke自定义网络之容器互联

    docke自定义网络之容器互联

    大家好,本篇文章主要讲的是docke自定义网络之容器互联,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Docker部署MySQL主从复制的实现

    Docker部署MySQL主从复制的实现

    本文主要介绍了Docker部署MySQL主从复制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-10-10
  • Docker 容器健康检查的指令方式详解

    Docker 容器健康检查的指令方式详解

    这篇文章主要介绍了Docker 容器健康检查的指令方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Docker Compose引用环境变量的方法示例

    Docker Compose引用环境变量的方法示例

    在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景。本文集中介绍 docker compose 引用环境变量的方式,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Docker初级网络端口映射的配置

    Docker初级网络端口映射的配置

    这篇文章主要介绍了Docker初级网络端口映射的配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • VSCode连接远程docker环境操作步骤

    VSCode连接远程docker环境操作步骤

    这篇文章主要介绍了如何在容器内部署和配置,包括查看Docker版本、管理容器和镜像、构建容器、配置容器内部环境、安装和配置VSCode以及远程连接和配置远程Docker容器环境,需要的朋友可以参考下
    2025-03-03
  • mac通过docker一键部署Nexus3的过程记录

    mac通过docker一键部署Nexus3的过程记录

    编写一些简易的 shell 脚本帮我们快速的搭建服务器,猿们只要按着套路“一步一步”的操作,基本上都可以快速部署服务,这篇文章主要介绍了mac通过docker一键部署Nexus3及安装步骤,需要的朋友可以参考下
    2022-10-10

最新评论