首页 > 其他分享 >在Docker中,docker run cmd entrypoint 有什么区别?

在Docker中,docker run cmd entrypoint 有什么区别?

时间:2024-03-04 09:11:25浏览次数:28  
标签:容器 CMD run cmd 命令 entrypoint ENTRYPOINT docker

在Docker中,docker runCMDENTRYPOINT 是相互关联又各有不同的概念,它们都涉及到如何配置和启动容器。下面详细介绍它们的区别和联系:

  1. docker run

    • docker run 是 Docker 客户端命令,用于创建一个新的容器并运行其中的应用程序。当你执行 docker run 时,你可以指定一系列参数,如镜像名称、命令、环境变量、端口映射、卷挂载等。它接受的命令行参数可以用来覆盖或者附加到镜像构建阶段定义的 CMDENTRYPOINT 指令。
  2. CMD

    • 在 Dockerfile 中,CMD 指令用于定义容器启动时默认执行的命令及其参数。它可以有三种格式:

      • CMD ["executable", "param1", "param2"]:JSON数组格式,推荐使用,exec形式执行程序,不会经过shell解析。
      • CMD ["param1", "param2"]:如果指定了 ENTRYPOINT,那么 CMD 中的参数将作为 ENTRYPOINT 的参数传递。
      • CMD command param1 param2:shell格式,会通过shell执行命令。
    • 如果用户在 docker run 命令后面指定了命令,则 CMD 中定义的默认命令会被新指定的命令替换。若没有指定命令,则执行 CMD 中指定的命令。

  3. ENTRYPOINT

    • ENTRYPOINT 也是在 Dockerfile 中定义的,它用于指定容器启动时始终执行的命令,这个命令不那么容易被 docker run 的命令行参数覆盖,除非以组合的形式追加参数。

    • ENTRYPOINT 也有两种格式,与 CMD 相似:

      • ENTRYPOINT ["executable", "param1"]:exec形式,优先级高于 CMD,并且无论是否提供 docker run 后的命令,都会执行此命令,并将 docker run 后的参数追加到 ENTRYPOINT 后。
      • ENTRYPOINT command param1:shell格式。
    • 使用 ENTRYPOINT 可以确保每次容器启动时都执行同一命令,这有助于将容器设计得更加“应用导向”,使得容器的行为更一致。当同时设置了 CMDENTRYPOINT 时,CMD 的内容会被视为 ENTRYPOINT 的参数。

总结起来:

  • CMD 是容器启动时如果没有指定命令时的默认行为,它的灵活性较高,易于被 docker run 后的命令覆盖。
  • ENTRYPOINT 更像是容器的核心功能定义,常用于定义容器的主应用程序,并且能接收 docker run 的参数,这样可以确保容器启动时总是执行预期的程序,并且可以处理任何额外的参数。

综上所述,两者可以配合使用,共同决定容器启动时的具体行为,从而更好地控制容器的应用场景和定制程度。

标签:容器,CMD,run,cmd,命令,entrypoint,ENTRYPOINT,docker
From: https://www.cnblogs.com/huangjiabobk/p/18051148

相关文章

  • RUN、CMD、ENTRYPOINT区别
    1、简要概述RUN:执行命令并创建新的镜像层,RUN经常用于安装软件包。CMD:设置容器启动后默认执行的命令及其参数,但CD能够被dockerrun后面跟的命令行参数替换。ENTRYPOINT:配置容器启动时运行的命令。2.Shell和Exec格式两种方式指定RUN、CMD和ENTRYPOINT要运行的命......
  • 云原生基础设施代码化-terragrunt处理
    Terragrunt是什么?Terragrunt是一个基于Terraform的开源工具,它通过向Terraform添加一些额外的功能来帮助管理和组织Terraform代码。它提供了许多功能,包括:DRY(Don’tRepeatYourself):使用Terragrunt可以减少Terraform代码冗余。例如,您可以将共享的配置块抽象为公共模块,然后在需......
  • pytorch报错:Variable._execution_engine.run_backward( # Calls into the C++ engine
    GPU模式下运行pytorch代码报错,pytorch为2.2.1,NVIDIA驱动版本535.161.07File"/home/devil/anaconda3/envs/sample-factory/lib/python3.11/site-packages/torch/_tensor.py",line522,inbackwardtorch.autograd.backward(File"/home/devil/anaconda3/envs/sample-......
  • docker Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is th
    应该是docker异常关闭导致无法启动。步骤1参考《https://www.cnblogs.com/langgeligelang/p/14607658.html》执行systemctldaemon-reloadsystemctlrestartdocker如果失败,提示Authorizationnotavailable.Checkifpolkitserviceisrunningorseedebugmessagef......
  • Windows下CMD和Tomcat设置编码为UTF-8
    由于日常编写代码,都是使用UTF-8编码,而CMD默认是GBK编码,导致执行mvn命令时,出现中文乱码问题,而chcp命令只在当次打开有效,每次打开都要重新切换代码页十分不便。对于CMD,可以通过修改注册表的方式,永久修改默认代码页。打开注册表编辑器,定位到\HKEY_CURRENT_USER\Console\%SystemRoot%......
  • 深入浅出Gitlab Runner自动构建C#应用程序
    概述程序员签入代码到Gitlab之后,GitlabRunner自动从流水线领取作业。按我们编排的“作业”,流水线工作步骤如下:程序员在Windows的VisualStudio2022中签入了“解决方案A”到Gitlab;Gitlab根据我们编排的.gitlab-ci.yml创建“流水线”;GitlabRunner领取到“作业”,以指定映像......
  • Gitlab Runner自动执行Docker容器
    概述Gitlab完全可以执行dockerrun命令,本文用最简单的方式来演示。修改.gitlab-ci.yml加入第4个stage,运行dockerrun。stages:-build-docker-image-test-push-image-run-websitevariables:PAY_IMAGE_FULL_URL:docker.amihome.cn/amihome/chang......
  • Gitlab Runner自动推送Docker映像
    接上文,增加两个stage最简单的推送,其实是在dockerbuild后边带上--push的开关即可。但是不经过测试就上传,Docker仓库里很快会堆满垃圾。所以我们设计新增两个场景,经过测试之后才push映像去仓库。stages:-build-docker-image-test-push-imagevariables:......
  • Gitlab Runner自动制作C#网站项目的Docker映像
    概述代码签入Gitlab后,GitlabRunner自动执行dockerbuild,构建网站应用的Docker映像。在VisualStudio2022中创建解决方案在Gitlab中创建项目这一步省略。签入源代码到Gitlab为项目添加Dockerfile在解决方案根目录下创建“.gitlab-ci.yml”stages:-build-docke......
  • GitLab Runner 添加 极狐GitLab 域名 host
    本文作者徐晓伟自定义GitLab域名解析查看极狐GitLabrunner日志查看极狐GitLabRunnerPod名称[root@anolis-7-9~]#kubectl-ngitlab-testgetpod|grepgitlab-runnermy-gitlab-gitlab-runner-6fb4bf7468-nmnkp0/1Running29(62sago)......