分享一些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


相关文章
|
6月前
|
缓存 安全 Docker
《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)
《Docker 简易速速上手小册》第3章 Dockerfile 与镜像构建(2024 最新版)
133 0
|
关系型数据库 MySQL 数据库
【Docker】手把手教你搭建好玩的docker项目合集
【Docker】手把手教你搭建好玩的docker项目合集
|
1月前
|
运维 Java Maven
Dockerfile实践java项目
通过上述实践,我们可以看到,Dockerfile在Java项目中扮演着至关重要的角色,它不仅简化了部署流程,提高了环境一致性,还通过多阶段构建、环境变量配置、日志管理、健康检查等高级特性,进一步增强了应用的可维护性和可扩展性。掌握这些实践,将极大地提升开发和运维团队的工作效率。
58 1
|
6月前
|
缓存 Shell Go
dockerfile笔记
dockerfile笔记
70 0
|
应用服务中间件 Shell nginx
Dockerfile企业实战教程
Dockerfile企业实战教程
|
Docker 容器
Dockerfile笔记
照着写就行
111 0
Dockerfile笔记
|
JavaScript Linux Docker
从最简单的Dockerfile开始!Dockerfile计划第二期
从最简单的Dockerfile开始!Dockerfile计划第二期
|
存储 关系型数据库 MySQL
Dockerfile命令及实践构建一个网站
dockerfile用于构建docker镜像的,部署一个用于运行你所需的容器环境。相当一个脚本,通过dockerfile自己的指令,来构建软件依赖、文件依赖、存储、 定制docker镜像的方式有两种: 手动修改容器内容,导出新的镜像 基于Dockerfile自行编写指令,基于指令流程创建镜像。
144 0
|
安全 网络协议 Linux
边学边做,Docker 如何远程连接?
本篇博客目标是完成了客户端与 daemon 完成安全的通信。
232 0
|
运维 Java Shell
Dockerfile学习
Dockerfile学习笔记