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的新文件消失

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM