前言

主要是记录Docker遇到的坑,更多的是因为自己的粗心大意,以此警示

正文

Dockerfile里的RUN

某一次把启动服务的命令写在了 Dockerfile 中,后来发现服务一直拉不起来.

原来是把启动命令写在了 Dockerfile 的 RUN 里

Dockerfile 的 RUN 命令只有在打包时才会用到

Dockerfile 的 CMD 命令才是在镜像启动时执行,我们只需要将启动命令放在 CMD 里即可

但是为了分开 (Dockerfile 只负责打包,执行由 Docker-compose ),我个人一般将启动命令放在 Docker-compose 的 command 里

Docker 内部的服务不会更新

某一次写了服务, 发现该服务有一个问题,修复后重新 go build 用 Docker 重新制作并测试

使用 Docker-compose 进行测试(docker-compose up ),只有编译过后的二进制服务更新了, 其余没更新

发现代码在 Docker 里没有更新(通过比对 md5 )

Dockerfile 文件如下

# 基础系统镜像
FROM debian:stable-slim # 新建文件夹
RUN mkdir /root/gophish # 设置工作目录
WORKDIR /root/gophish # COPY当前目录所有文件到WORKDIR
COPY . . # 设置执行权限并执行
RUN chmod +x gophish # 注意:RUN后面的命令只有在构建镜像时执行,CMD才是启动时执行,也可以将启动写到DockerCompose中方便管理

原因是在多次 build 时, 基础镜像 stable-slim 里有上一次编译的 gophish 二进制文件

也就是说, mkdir 并不会执行, WORKDIR也不会执行, 走到 COPY 时, Docker没有检测到二进制文件 gophish 更新了,

所以镜像内部的 gohish 一直是老得版本

解决问题有多种方法, 比如把原来的镜像删除/COPY时不要一次全部COPY指定文件夹依次COPY等等,我是直接修改Dockerfile

# 基础系统镜像
FROM debian:stable-slim # 新建文件夹, 防止Docker识别不出文件改动,在COPY前先删除原有文件
RUN rm -rf /root/gophish/ && mkdir /root/gophish # 设置工作目录
WORKDIR /root/gophish # COPY当前目录所有文件到WORKDIR
COPY . . # 设置执行权限并执行
RUN chmod +x gophish # 注意:RUN后面的命令只有在构建镜像时执行,CMD才是启动时执行,也可以将启动写到DockerCompose中方便管理

COPY 的艺术

看到许多教程都建议 COPY . .

也就是将本地文件夹所有文件都 COPY 到 Docker 中

这种方式跟普通的一个文件夹一个文件夹的 COPY 相比, 虽然减少了几行命令, 但是也有其缺点

就是会将所有文件都 COPY 比如 .git 文件夹等不需要 COPY 的文件夹和文件

比如

Docker-compose up 时代码不会更新

如果在 docker-compose 中有

    image: xxx:1.0
build: .

这代表image不存在时才会 build

如果存在老的版本你改动了代码也不会重新build

解决方法是删除 xxx 的image 或者运行 docker-compose build

Docker踩过的坑的更多相关文章

  1. Win7 安装 Docker 踩的那些坑

    公司电脑是 WIN7 x64 旗舰版 SP1,安装 Docker 时踩了好多雷,分享出来给大家排排雷. 首先,Docker Desktop Installer 的 Windows 版只支持 Win10 ...

  2. windows虚拟机下 安装docker 踩过的坑

    首先,你的是win7.8还是win10 windows对docker兼容也是最近的事,所以win7.8的话,安装docker是要用工具箱的,不过官方给了下载. 国内话的可以通过,阿里镜像,或者清华镜像 ...

  3. 使用docker踩过的坑(二)

    关于docker的部署,我这里不多说了 下面写一些最近经常用到的命令: docker下载镜像: docker pull 镜像名 docker查看已下载的所有镜像: docker images dock ...

  4. 使用docker踩过的坑

    最近需要使用docker,但是win10电脑的系统不是docker windows适用版本,没法在windows上安装 于是就上centos虚拟机里面装了一个docker docker pull文件的 ...

  5. docker部署redis及踩到的坑

    对docker很好奇,玩了一下,部署了一个redis,结果踩了很多坑 任务目的就是在docker中成功部署redis并保证数据持久化到本地,配置也使用本地配置 docker run -p : -v $ ...

  6. ubuntu 下安装docker 踩坑记录

    ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...

  7. ASP.NET Web 应用 Docker踩坑历程——续

    ASP.NET Web 应用 Docker踩坑历程发表后,也开始使用Docker了,然而发布的过程比较痛苦,经常发生下图的事情: 据说是nuget包还原时发生错误 百度了半天也找不到解决的方法,而发生 ...

  8. ASP.NET Web 应用 Docker踩坑历程

    听说Docker这玩意挺长时间了,新建Web应用的时候,也注意到有个启用Docker的选项. 前两天扫了一眼<[大话云原生]煮饺子与docker.kubernetes之间的关系>,觉得有点 ...

  9. 可视化爬虫Portia安装和部署踩过的坑

    背景 Scrapy爬虫的确是好使好用,去过scrapinghub的官网浏览一下,更是赞叹可视化爬虫的犀利.scrapinghub有一系列的产品,开源了大部分项目,Portia负责可视化爬虫的编辑,Sp ...

随机推荐

  1. HTML引入外部字体

    HTML5如何引入外部字体 背景 现在我需要 "Montserrat-ExtraLight ExtraLight"类型的字体,但是html的font-family中找不到这个类型的 ...

  2. 题解-CmdOI2019 口头禅

    题面 CmdOI2019 口头禅 给 \(n\) 个 \(01\) 串 \(s_i\),\(m\) 个询问问 \(s_{l\sim r}\) 的最长公共子串长度. 数据范围:\(1\le n\le 2 ...

  3. docker下安装svn-server

    参考资料,搭建过程比较详细:https://www.jianshu.com/p/a25fac7e7811 我按照上面资料搭建后,将其重新制作成了新的镜像theorydance/svn-server:1 ...

  4. VMware 虚拟机网卡设置与外网访问

    1 查看虚拟机网卡设置,查看虚拟机网关. 2 然后,设置本地机器VMnet8网卡的IP地址和子网掩码.切记,IP地址不能与虚拟机网卡IP地址相同. 3 配置虚拟机Centos的ens33网卡 TYPE ...

  5. 自顶向下redis4.0(1)启动

    redis4.0的启动流程 目录 redis4.0的启动流程 简介 正文 全局server对象 初始化配置 初始化服务器 事件主循环 参考文献 简介 redis 在接收客户端连接之前,大概做了以下几件 ...

  6. elasticsearch-head 配置

    elasticsearch-head install node.js Download node.js: 将下载的包,解压并配置环境变量  vim /etc/profile  ​ #set for n ...

  7. Java 一行代码 数组遍历输出

    Arrays.stream(arr).forEach(num -> System.out.println(num));

  8. Python高级语法-深浅拷贝-总结(4.2.1)

    @ 目录 1.说明 2.代码 关于作者 1.说明 任何可变数据类型都牵扯到深浅拷贝 但是元组,常数等,不可变数据类型,无论浅拷贝,深拷贝都是指向 不管如何嵌套,一旦牵扯到可变数据类型,都会有深浅区别 ...

  9. kali2020 装不上docker

    问题描述 如图,不支持i386体系架构 所以百度了一下啥是i386,以及docker支持哪些体系架构 官网的截图如下: 然后我发现我一直以为我装的是64位debian,实际上我装的是32位的 补充一下 ...

  10. 精尽Spring MVC源码分析 - RequestToViewNameTranslator 组件

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...