在做鏡像的過(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é)束就退出。

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)。