dockerfile踩坑

在做鏡像的過(guò)程中遇到較多問(wèn)題,踩了很多坑,簡(jiǎn)單記錄如下

運(yùn)行后就exited(0)

問(wèn)題:使用CMD ["sh","./startup.sh","&"] 或者ENTRYPOINT ["sh","./startup.sh"]制作的鏡像,docker run -d 不加-it參數(shù)運(yùn)行后就exited(0),docker run -dit 增加-it參數(shù)則正常運(yùn)行。

做的組件需要運(yùn)行在公司的SaaS平臺(tái)上,不通過(guò)CI平臺(tái)發(fā)布、自定義的僅支持基礎(chǔ)功能,docker run -d 不加-it參數(shù)可以運(yùn)行OK,在SaaS平臺(tái)上也可以O(shè)K。

猜測(cè)是容器執(zhí)行了命令后,結(jié)束容器退出,1號(hào)進(jìn)程不是常駐的服務(wù)器進(jìn)行,嘗試實(shí)驗(yàn):
1.腳本中增加sleep 999999d,
2.CMD 后面多個(gè)命令先指定一個(gè)1號(hào)進(jìn)程為bash的等,
3.不使用腳本,直接使用啟動(dòng)命令,且不放入后臺(tái)有tty窗口輸出的
實(shí)驗(yàn)結(jié)果:
1增加指定時(shí)間是OK的,但是不是正常解決途徑;
2.增加多個(gè)命令沒(méi)找到可行方案,后續(xù)再做下實(shí)驗(yàn)(待研究);
3.執(zhí)行使用命令也是可行的,啟動(dòng)腳本增加ps -aux,可以看到1號(hào)進(jìn)程是startup.sh,執(zhí)行結(jié)束就退出。


image.png

CMD、ENTRYPOINT參數(shù)使用/原理,查看很多資料,https://www.cnblogs.com/ilinuxer/p/6188303.html

  • Dockerfile 如下
# Version V0.0.1
FROM openjdk:8-jre-slim

MAINTAINER cszbb <wdjlwz@163.com>
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    apt-get clean &&\
    apt-get update && \
    apt-get -qy install \
                wget \
                telnet \
                iputils-ping \
                unzip \
                procps \
                net-tools \
                iproute2 
#ENV Setting

#copy jmeter包到容器內(nèi)部
RUN mkdir /mock
COPY v-mock1.1.0.jar /mock
COPY startup.sh /mock
 
WORKDIR /mock
RUN chmod 777 startup.sh
#CMD ["sh","./startup.sh","&"] 
CMD nohup java -jar v-mock*.jar --server.port=18089
#ENTRYPOINT ["sh","./startup.sh"]
EXPOSE 18089

startup.sh如下(不使用)

#!/bin/bash
nohup java -jar v-mock*.jar --server.port=18089 > nohup.log 2>&1 &
#2>&1 2    標(biāo)準(zhǔn)錯(cuò)誤(錯(cuò)誤信息輸出);>&1 繼續(xù)輸出到標(biāo)準(zhǔn)輸出
echo "url:http://127.0.0.1:18089"
echo "U/P:vmock/vmock123"
ps -aux

build是找不到文件或目錄

例如如下,報(bào)錯(cuò),增加RUN pwd 查看發(fā)現(xiàn)ADD后目錄切換為Autotest ,建議使用./ 或者絕對(duì)路徑

ADD Autotest .
# RUN pwd && ls -l
RUN cd Autotest 

build時(shí)Sending build context to Docker daemon 9.5GB

build時(shí)時(shí)間過(guò)長(zhǎng),Sending build context to Docker daemon 9.5GB,Dcokerfile 、程序、等在/data目錄下,此目錄下由很多其他業(yè)務(wù),有40~50GB的文件。
build會(huì)將指定的目錄下的所有文件發(fā)到Docker daemon中,所一定指定好程序目錄或者創(chuàng)建好目錄,將dockerfile及程序都在此目錄下執(zhí)行,減少誤操作風(fēng)險(xiǎn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容