zoukankan      html  css  js  c++  java
  • dockerfile COPY命令失效

    问题描述


    在制作tars-node镜像时,COPY项目源码到镜像中的命令没有生效,启动容器后进入,没有看到拷贝的相关文件。

    原因分析


    COPY命令是常用的制作镜像时拷贝文件到镜像中的方式,没有什么特殊的地方,命令如下:

    看上去一切正常,但是进入容器后确实没有看到对应的文件,

    1、尝试COPY另一个新文件到相应目录上,还是没有看到,

    /data/tars/tasnode-date/这个目录,是tars官方提供的tars相关数据目录,怀疑是不是tars容器启动时,依赖的基础镜像是不是还做了其他操作,比如重置这个目录?

    2、先验证下是不是只是这个目录无法COPY,

    上图中,在镜像中新建了一个目录,将两个go文件COPY进去,

    进入容器后,可以正常看到拷贝的文件,说明COPY失效问题确实只存在于/data/tars/tasnode-date/目录。

    3、查看了tars-node基础镜像的所有sh脚本,没有发现做重置目录的操作,讲道理也没什么动机去做这个目录的重置。

    4、回想起之前的一个问题,就是新起的mysql容器存在旧数据,当时的原因是新起的mysql容器,做了容器卷的映射,因为是复制粘贴的容器启动命令,导致新mysql容器的数据和旧的一模一样,

    那么这次COPY命令不生效,是否是因为容器启动后,/data/tars/tasnode-date/被映射到了宿主机的目录,而宿主机目录中不存在我们要拷贝的文件,所以出现这个情况?

    查看tars-node启动命令:

    docker run -d \
        --name=tars-node-auto \
        --net=tars \
        -e INET=eth0 \
        -e WEB_HOST="http://172.25.0.3:3000" \
    	-e ENV="pt" \
    	-e SERVER_NAME="http" \
        --ip="172.25.0.5" \
        -v /data/logs/tars-node/:/data/tars/app_log/ \
        -v /data/tars/data/tars-node/:/data/tars/tarsnode-data/ \
        -v /etc/localtime:/etc/localtime:ro \
        -p 9000-9010:9000-9010 \
        tars-node-auto:v0.1

    -v /data/tars/data/tars-node/:/data/tars/tarsnode-data/ \

    确实。。启动时将容器内的/data/tars/tarsnode-data/目录映射到了宿主机的 /data/tars/data/tars-node/目录,所以COPY命令是生效了,但是启动容器时,又将该目录映射,导致COPY的内容都消失了。

    解决方案


    删除容器启动命令中的/data/tars/tarsnode-data/目录映射,

    切记启动容器时,要确认是否需要容器卷映射,否则很容易产生两种问题:

    1、存在旧数据

    2、COPY的新文件消失

  • 相关阅读:
    Centos7源码安装mysql及读写分离,互为主从
    Linux简介及Ubuntu安装
    CentOS7 IP自动获取
    memcached总结
    CentOS7安装iptables防火墙
    centos 7.0 mono&Jexus V5.5.3安装
    设置背景模糊效果
    vue 动画过渡
    sticky footer
    设置最低高度为100%
  • 原文地址:https://www.cnblogs.com/yourstars/p/15609202.html
Copyright © 2011-2022 走看看