分享一些Dockerfile新手会遇到的坑

简介: 分享一些Dockerfile新手会遇到的坑

分享一些Dockerfile新手会遇到的坑

先说这不是教程啊,我也是新手,如果你还不清楚基本的用法,建议直接阅读Dockerfile reference

COPY会遇到的坑

一般官网都会放上COPY用法的指令,但是通过看指令,实在是不敏感,甚至会出现很多误解的情况,最后导致docker build不成功。

用法我还是贴一下

COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

COPY的作用是可以将本地的组建复制到容器当中去,在构建镜像的时候使用,分享两个官网例子看一下

COPY test.txt relativeDir/

复制test.txt文件到relativeDir目录去,但是他使用了相对路径,dockerfile就会根据上一个WORKDIR来拼接路径

那最后test.txt文件的位置就会在<WORKDIR>/relativeDir/。

如果使用绝对路径就不会有这个问题,来看

COPY test.txt /absoluteDir/

注意这都不是坑,目前来说都很OK,新手可能会发现这好像跟Linux系统的cp命令差不多啊。

坑在于,官网没有给复制目录的用例,但是在下方用文字来做补充解释了,如果新手没看到,就会踩坑。

坑点在于

  • 如果<src>是一个目录,那么包括文件系统的metadata,目录内全部的内容会被复制,注意!目录本身不会被复制

我们创建一个repo目录,然后在内部创建一个test.txt,像这样/app/repo/test.txt

现在我们要复制repo内所有的内容进入容器

如果你理解成CP了,那么你可能会把这条命令写成这样

WORKDIR /app
COPY ./repo/ ./

后续的构建还需要利用repo里面的东西,此刻你可能觉的容器内的目录已经被你构建成了这样/app/repo/test.txt

实际上,容器内部的目录结构需要你自己构建,repo目录并不会复制过去

结果是这样的


image.png


如果你理解成CP

改成

COPY ./repo/ /repo/


image.png


相关文章
|
9月前
|
缓存 安全 Docker
《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)
《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)
164 0
|
关系型数据库 MySQL 数据库
【Docker】手把手教你搭建好玩的docker项目合集
【Docker】手把手教你搭建好玩的docker项目合集
|
9月前
|
缓存 Shell Go
dockerfile笔记
dockerfile笔记
78 0
|
9月前
|
缓存 Shell Docker
Docker Review - dockerfile 入门篇
Docker Review - dockerfile 入门篇
98 0
|
运维 Java 应用服务中间件
Docker——Dockerfile的理解 & 案例实操
Docker——Dockerfile的理解 & 案例实操
Docker——Dockerfile的理解 & 案例实操
|
应用服务中间件 Linux Docker
[笔记]docker入门《一》环境安装
[笔记]docker入门《一》环境安装
|
应用服务中间件 Shell nginx
Dockerfile企业实战教程
Dockerfile企业实战教程
|
Docker 容器
Dockerfile笔记
照着写就行
126 0
Dockerfile笔记
|
运维 监控 应用服务中间件
Docker小白的福音:50条Docker命令清单,干就完了!
Docker可以让开发人员、运维人员更容易使用容器创建、部署和运行应用程序。掌握一些必备的Docker命令对于使用Docker的工程师非常重要,那么今天笔者给大家整理了一份Docker的命令备忘单,希望大家可以好好保存,在使用的时候可以拿出来查阅使用。
514 1
Docker小白的福音:50条Docker命令清单,干就完了!
|
Ubuntu 开发工具 Docker
Dockerfile使用介绍(入门教程)
Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,当我们需要定制自己额外的需求时,只需在 Dockerfile 上添加或者修改指令,重新生成 image 即可。
367 0
Dockerfile使用介绍(入门教程)