首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我不能在Dockerfile中运行命令,但我可以从我的Docker容器中运行?

在Dockerfile中运行命令是不被推荐的,因为Dockerfile是用来定义Docker镜像的构建过程的,而不是用来运行命令的。Dockerfile中的每一条指令都会创建一个新的镜像层,并且这些指令是按照顺序执行的。

当你在Dockerfile中运行命令时,每一条命令都会创建一个新的镜像层,这样会导致镜像层的增加,增加了镜像的大小。而且,每一次构建镜像都会重新执行这些命令,这样会增加构建时间。

相反,当你在已经创建的Docker容器中运行命令时,这些命令是在容器中执行的,不会创建新的镜像层,也不会增加镜像的大小。这样可以节省存储空间,并且可以更快地启动容器。

因此,为了避免不必要的镜像层和增加构建时间,推荐将需要在容器中运行的命令放在Dockerfile中的CMD或ENTRYPOINT指令中。这样在构建镜像时,这些指令会被添加到镜像中,但不会立即执行。而是在启动容器时,这些指令会被执行。

总结起来,不能在Dockerfile中运行命令是为了避免不必要的镜像层和增加构建时间,而在Docker容器中运行命令是为了节省存储空间并更快地启动容器。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云容器服务(Tencent Kubernetes Engine,TKE):提供高度可扩展的容器管理服务,支持Docker容器的部署、管理和自动化运维。详情请参考:https://cloud.tencent.com/product/tke
  • 腾讯云云服务器(CVM):提供弹性计算能力,可快速创建和管理云服务器实例,适用于各种应用场景。详情请参考:https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(Tencent Cloud Object Storage,COS):提供高可靠、低成本的对象存储服务,适用于存储和处理各种非结构化数据。详情请参考:https://cloud.tencent.com/product/cos
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

docker容器前台程序和后台程序,为什么一定要前台运行

docker 容器默认会把容器内部第一个进程,也就是pid=1程序作为docker容器是否正在运行依据,如果docker容器 pid = 1 进程挂了,那么docker容器便会直接退出,也就是说...容器运行命令如果不是那些一直挂起命令(比如运行ping,sleep),就是会自动退出。而上面的代码bash就是需要执行指定命令命令如果执行完毕了,或者叫指定应用终结时,容器会自动停止。...解决办法目前了解可以使用以下3种方法,具体用哪种方法,依据实际情况,生产情况下,通常用docker-compose结合具体cmd作为容器初起命令。...ssh在镜像(或容器安装SSH Server,这样就能保证多人进入,建议使用,具体见为什么不需要在 Docker 容器运行 sshdnsenternsenter使用方法docker exec-推荐使用通常我们可以通过容器...name或容器ID进入到容器:如果我们在启动容器时候指定-name选项,我们可以docker exec -it container_name bash没指定name,我们可以通过docker ps

3.3K30

可以source脚本情况下将变量Bash脚本导出到环境

echo $VAR 有没有一种方法可以通过只执行 export.bash 而 source 它获取 $VAR? 答: 不可以。 但是有几种可能解决办法。...在调用 shell 上下文中执行脚本: $ cat set-vars1.sh export FOO=BAR $ . set-vars1.sh $ echo $FOO BAR 另一种方法是在脚本打印设置环境变量命令.../set-vars2.sh)" $ echo "$FOO" BAR 在终端上执行 help export 可以查看 Bash 内置命令 export 帮助文档: # help export export...-f 指 shell 函数 -n 每个(变量)名称删除 export 属性 -p 显示所有导出变量和函数列表 ---- 参考: stackoverflow question 16618071...help eval 相关阅读: 用和不用export定义变量区别 在shell编程$(cmd) 和 `cmd` 之间有什么区别 ----

13520

教程 | 如何用Docker成为更高效数据科学家?

想搞清楚这种技术可以如何让更有效率,但我发现在网上找到教程要么过于注重细节(解释了一些作为数据科学家绝不会使用功能),要么就过于浅显(没有足够信息帮助我理解如何快速有效地使用 Docker...增加这个语句目的是为了让别人知道可以联系谁,同时也方便搜索 Docker 容器,尤其是在一个服务器上同时运行着很多容器时。...主机目录只有在容器运行时才声明(因为你可能在不同计算机上运行容器),而不会在定义镜像时声明*。目前你只指定了 Docker 容器内你想与主机容器共享文件夹名称。...由于这个原因,你不能在 Dockerfile 挂载主机目录。VOLUME 指令不支持指定 host-dir 参数。你必须在创建或运行容器时指定挂载点。... Docker 镜像创建和运行容器 现在你已经准备好让这一切工作起来了!我们可以通过执行以下命令来调出环境: ?

2.4K70

Dockefile文件创建Docker镜像

Docker 是一个开源应用容器引擎,让开发者可以打包他们应用以及依赖包到一个可移植容器,然后发布到任何流行 Linux 机器上,也可以实现虚拟化。...EXPOSE 示例注释写是映射端口,但我觉得用暴露端口来形容更合适,因为在使用 dockerfile 创建容器时候不会映射任何端口,映射端口是在用 docker run 时候来指定映射端口,比如我把容器...VOLUME,VOLUME指令创建一个可以本地主机或其他容器挂载挂载点,用法是比较多,都知道 docker 做应用容器比较方便,其实 docker 也可做数据容器,创建数据容器镜像 dockerfile...构建演示 dockerfile 构建镜像命令很简单,在示例命令是 “docker build -t lorenwe/centos_nginx ....“,注意后面的点不能省略,表示当前目录寻找 dockerfile 来构建镜像 docker build -t lorenwe/centos_nginx .

93020

轻松容器化golang应用程序

我们可以我们项目中创建我们镜像,简单地在您本地计算机上运行它,甚至可以通过从 harbour 中提取您镜像运行它。...Dockerfile 有多种编写方式Dockerfile但我将使用不同基础图像制作 3 个示例:golang docker、alpine、scratch。...之后我们需要运行这个命令docker build -f Dockerfile -t test-go-docker:latest . -f flag 是我们Dockerfile....Scratch 是一个空镜像,所以一旦容器运行,我们就无法执行到容器,因为它没有 shell 命令。如下是输出 docker images。...结论 就个人而言,我会选择第二个Dockerfile为什么?因为体积小而且它还有几个命令和一个shell命令所以我们可以docker exec进入容器并访问它。

42120

开发容器:可重用开发环境

实现这一体验方式就是使用容器进行开发,这些容器有时也被称为开发容器。 什么是开发容器 当我们说到“容器”,通常指的是使用 Docker 运行容器。这也意味着项目可以在 Linux 环境。...如果运行时是源代码编译,那就可以将其整合到开发容器 Dockerfile 文件。自从开始使用开发容器以来,还没有用过语言版本管理器,而且并不怀念它们!...这就是为什么当我面对一个新客户并开始构建一个开发容器时,通常会从头开始。我会构建一套全新容器配置文件,项目设置指令而不是已有的 Dockerfile 开始。...实际上,你可以直接 Windows 存储库中选择你需要 Linux 发行版,并直接 Debian 或 Fedora 存储库运行 Linux 二进制文件,不需要进行任何重新编译或模拟。...这意味着为了运行 Docker,需要进行一定程度虚拟化。不再用 Mac 做开发,但我朋友那里听说,他们在使用 Docker 时遇到了一些古怪问题,尤其是在文件 I/O 方面。 这该怎么办呢?

1.2K30

Dockerfile介绍及常用保留指令

docker基础镜像运行一个容器2:执行一条指令并对容器做出修改3:执行类似docker commit操作提交一个新镜像层4:docker再基于刚提交镜像运行一个新容器5:执行dockerFile...容器可以认为是软件镜像运行状态,也就是依照镜像运行容器实例。...如果指定,默认是rootENV用来在构建镜像过程设置环境变量ADD将宿主机目录下文件拷贝进镜像且会自动处理url和解压tar压缩包COPY类似ADD,拷贝文件和目录到镜像。...CMD启动容器命令CMD指令和RUN指令像是。也是两种格式:shell 和exec.注意:Dockerfile可以有多个cmd指令,但只有最后一个生效,CMD会被docker run之后参数替换。...为什么呢?因为CMD会被docker run之后参数替换也就是dockerfileCMD["catalina.sh","run"]被替换成了CMD["/bin/bash","run"]了。

1K40

微服务架构基于Nginx、Node.js和RedisDocker工作流

可以Docker命令来构建容器,但为了更加简单,推荐使用Dockerfile也用Docker Compose去编排应用连接容器。 首先,先介绍下如何定义容器。...Docker Compose让你在一个文件定义多容器应用并用一个命令使应用程序运行起来。 已经定义一个Docker Compose YAML文件,如下: nginx:build: ....只需要一个命令Docker Compose就可以构建所需镜像,并导出所需端口,然后通过YAML定义运行和连接容器。...Docker Compose一个显著特点就是具有动态扩展容器能力。使用命令docker-compose scale node=5可以扩展容器数量来运行一个服务。...生产环境能在任何时间Docker Hub和从容器编排应用能拉到最终镜像。 以上是一个基于Nginx、Node.js和RedisDocker流程实例。

1.7K50

在Daocloud上部署Typecho

,我们可以将自己想要程序及其运行环境打包成 Docker 镜像,然后把镜像上传到服务器上运行。...采用 Docker 部署应用一个优势是你可以根据自己需要灵活地配置你想要环境,最后只需要把一个 Docker 镜像交给服务器就能运行了。...为此,Daocloud 同时也提供了 Volume 服务,这里Volume是“数据卷”意思,顾名思义,它相当于一个外接磁盘,它可以挂载到 Docker 容器某一个目录上,应用运行时对这个目录更改直接对应于对这个磁盘操作...htaccess 隐藏 index.php ),加上这一行 RUN a2enmod rewrite 到目前为止构建镜像已经可以运行了,看起来也没什么异常,但很快便发现,网站主题文件无法在 Typecho...后台在线修改、附件无法上传,根据我推断应该是容器运行 PHP 进程没有操作 Volume 里面的文件权限。

1.2K40

Golang 微服务-第二部分-Docker和go-micro

容器诞生 容器是精简版操作系统。容器包含内核、用户操作系统或通常构成操作系统较低级别组件。 容器只包含顶层库及其运行组件,内核在主机上共享。...与之相比,大约 1GB Ubuntu 虚拟机,你可以开始看到为什么 Docker 镜像更适合微服务和云计算。 接下来我们创建一个新目录来存放我们应用程序,并将上下文目录设置到我们新目录。...Docker 镜像就像一个 npm 或 yum repo。当你在你 Dockerfile 里面定义了 ,你就告诉了 docker docker hub 下载哪个镜像来作为运行环境。...现在将会在其他 Docker 文件应用这种新方法。 噢,记住要记得 Makefiles 删除 。 更多多阶段编译在这里 Vessel 服务 让我们创建第二个服务。...我们不能在同一个端口上运行两个 Docker 容器,所以我们在这里利用 Docker 端口转发来确保服务上 50051 端口映射到主机网络上 50052 端口。

1.5K50

考虑将Docker引入您数据科学工作流程

更喜欢这种方式来组织工作,而不是创建一个包含环境和笔记本Docker容器。...当容器启动时,我们可以打开Jupyter Web界面: http://127.0.0.1:8007 当我们要求令牌时,我们会将“mynotebook”或您设置任何内容放入您dockerfile,就是这样...当我们工作完成后,我们可以使用以下命令停止容器docker stop datascience_env 认为Docker是每个开发人员和每个数据科学家部署和共享工作非常重要工具。...角度来看,引入最重要创新Docker是一种描述如何正确地重建代码可以运行环境方法(使用Dockerfile)。...通过这种方式,每次都可以重现在开发过程中使用的确切环境,并且可以与每个人共享构建容器

68100

Docker不再是唯一选择

它们包含了容器运行时、容器分发和容器镜像规范,其中涵盖了使用容器所需所有特性。 有了OCI,你可以选择一套最符合你需求工具,同时你仍然可以享受跟Docker一样使用相同API和CLI命令。...与Docker不同,Podman不需要Daemon来运行,也不需要root特权,这是Docker长期以来一直关注问题。基于它名字,Podman不仅可以运行容器,还可以运行pods。...除了Docker和Podman之外,还有其他容器引擎,但我个人认为它们都是没什么出路技术,或者都不太适合本地开发和使用。...,我们可以只用buildah bud构建镜像,bud代表使用Dockerfile构建,但是你还可以使用更多Buildahs脚本:from,run和copy,这些命令对应命令Dockerfile(FROM...下一个是谷歌Kaniko。Kaniko也是Dockerfile构建容器镜像,跟Buildah类似,也不需要守护进程。

88320

使用docker高效搭建开发环境

传统做法 在很长一段时间内,都是把每个软件编译、安装过程写成一个脚本,之后再需要用时候直接运行脚本即可,但这样方式,通常会遇到下面这些问题: 脚本只能在当时操作系统环境下运行。...docker做法 先概括介绍下方法: 让每个软件运行容器,因为运行容器环境是可以固定下来,所以编译安装脚本写一个就可以了。 代码使用数据卷方式加载到需要容器。...下面用实例来说明把: 示例Nginx环境构建 将构建过程放到git:https://gitee.com/andals/docker-nginx Readme记录了构建所需要执行脚本命令,大家访问上面的网址就可以看到...(pkg目录)放到镜像 把构建脚本放到镜像 执行构建脚本 容器启动时,执行init.sh,里面启动相应服务 Readme.md记录了执行构建命令容器运行命令,示例运行如下: ligang@...另外,有时也需要进入容器,查看服务运行情况。 为了方便做这些事情,开发了一个工具dockerbox,可以很方便做到这些事情。

1.7K31

记录我们迁移到 Docker 挑战和经验教训

1 问题:软件工程没有免费午餐 PaaS 解决方案非常方便。相信任何本地部署服务或 IaaS 迁移其应用程序到 PaaS 的人都会同意。...黑暗运维更加危险,你希望开发团队自己运行容器,并在你防火墙上戳洞。 3 是什么触发了变革需要以及我们向 Docker 迁移? 容器是上述所有挑战答案——一个成熟、甚至枯燥软件打包标准。...但是为什么 container-structure-test 需要一个预先存在构建步骤呢?因为,在后台,它在活跃容器上使用 docker exec 命令运行每一个测试。...Docker 对于异步间歇进程处理得怎么样?其实并不太好。Docker 101 众所周知,你不能在与主进程相同容器运行 cron。 那么,有效替代方案是什么?...由于时间和计划限制,我们不得不加快步伐。 最后,我们可以声明将 crontab 保持在节点级别,并使用 docker exec 将命令运行到活跃容器

86820

Docker之旅

Docker内容很多,不是一篇文章就能讲清楚,而且不是一朝一夕就能掌握,只能在工作慢慢积累 Docker是什么?相信每个人心中都有一个哈姆雷特。简单说说自己看法。...docker默认官方镜像可能在国内访问速度会比较慢,pull镜像时间会很长。所以需要配置国内镜像加速, 配置了阿里云和Daocloud ?...该命令将复制指定容器 。其中 可以Dockerfile所在目录一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。...创建一个可以本地主机或其他容器挂载挂载点,一般用来存放数据库和需要保持数据等。 USER 格式为 USER daemon。 指定运行容器用户名或 UID,后续 RUN 也会使用指定用户。...OK, 来个实际例子吧。把自己某个flask应用docker运行。 ? 首先得在项目中建一个Dockerfile文件。

91420

是时候跟Docker说再见了

Docker 不同,Podman 不需要守护进程,也不需要 root 特权,这是 Docker 长期以来一直存在问题。名字就可以看出来,Podman 不仅可以运行容器,还可以运行 Pod。...除了 Docker 和 Podman 之外,还有其他容器引擎,但我认为它们没有出路或者都不适合用于本地开发。...你可能会问,既然 Buildah 已经被包含在 Podman CLI 为什么还要使用单独 Buildah CLI?...,你可以直接使用 buildah bud 构建镜像,其中 bud 表示使用 Dockerfile 来构建镜像,你也可以使用其他更多命令,如 from、run 和 copy,它们分别对应 Dockerfile...如果你使用了本地注册表,这个命令可以作为拉取/推送替代方案。 另外,还想提一下 Dive,这是一个检查、探索和分析镜像工具。

87030

深入剖析Docker镜像(文末送书)

Docker镜像是一个_特殊文件系统_,它提供容器运行时需要程序、库、资源、配置还有一个运行时参数,其最终目的就是能在容器运行我们代码。...容器镜像也是一样。 当我们通过Dockerfile制作了一个镜像,这时候镜像是静态,并不能为我们提供需要服务,我们需要通过docker将这个镜像运行起来,使它从镜像变成容器静态变成动态。...Docker镜像构建通过docker build命令触发,docker build会根据Dockerfile文件指令构建Docker镜像,最终Docker镜像是由Dockerfile命令所表示层叠加起来...运行 bash 脚本不兼容,因为没有内置 bash,所以运行 bash shell 脚本会兼容。...抛开父镜像ubuntu:latest本身层不说,上面的Dockerfile足足增加了5层。在Dockerfile是支持命令合并,我们可以把上面的Dockerfile改成如下。

58130

使用 Docker 加速开发工作流

在开发工作流中使用 Docker 可以极大提高生产力,它消除了"它在机器上都可以运行"这类典型错误,在不同机器上运行也只需要一个 Docker 守护进程,而不需要其他组件。...要启动一个容器,你需要一个 Docker 镜像,这个镜像是你容器模板,你可以 Docker Hub 获取已经预定义镜像,或者通过编写 Dockerfile 文件来配置自己镜像。...为什么Docker 化开发工作流 上面已经提到了在你开发环境中使用 Docker 好处。...ENTRYPOINT 会在 Docker 容器启动时候执行你在这里插入命令。 现在,我们已经准备好了我们 Dockerfile 文件,我们需要一个简单 express 应用,可以容器运行。...然后现在我们可以运行如下所示命令Docker 将根据我们 Dockerfile 文件配置创建一个镜像,然后同时运行两个容器(api和mongo)。

1.6K51

使用这 3 个技巧升级您 NodeJS Dockerfile

Dockerfile 是创建容器蓝图。它们是简单文本文件,包含了创建容器镜像所需命令,这些命令通常是您手动执行Dockerfile 就是您容器源代码。...建议使用基础镜像标签,而是使用版本号。 2- 是否需要复制全部内容? 可能不需要,很确定您在生产 Docker 容器不需要 .prettierignore 或 .gitignore 等文件。...您可以通过两种方式解决这个问题: 为每个文件/文件夹指定一系列 COPY 指令。 在 .dockerignore 文件中指定不想要复制内容列表。 更喜欢指定想要复制到镜像文件/文件夹列表。...您可以Dockerfile 运行 whoami 来检查这一点。...当然,您可以始终运行 RUN export NPM_TOKEN=123 来最终镜像删除它,但这不是最佳做法,而且仍将在 docker history 可见。

32910
领券