发现一个挺有意思的问题,之前一直没发现docker的这个问题,今天在改 Dockerfile 的时候发现,构建后运行容器,进行容器内部发现一个配置文件丢失了。
检查命令没有问题,查看日志也没有问题。

build日志如下:

1
2
3
4
5
6
7
8
9
10
--2022-03-15 10:02:31--  https://raw.githubusercontent.com/protocol/deployment/master/main_net_config.conf
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 17180 (17K) [text/plain]
Saving to: '/java/config/main_net_config.conf'

0K .......... ...... 100% 28.5M=0.001s

2022-03-15 10:02:31 (28.5 MB/s) - '/java/config/main_net_config.conf' saved [17180/17180]

各种验证后,可以确定不是 Dockerfile 的问题,日志也是提示 saved,大概率是docker的问题,各种找解决方法

有问题的写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
FROM centos7/centos7

ENV TMP_DIR="/build"
ENV JDK_TAR="jdk-8u202-linux-x64.tar.gz"
ENV JDK_DIR="jdk1.8.0_202"
ENV JDK_MD5="0029351f7a946f6c05b582100c7d45b7"
ENV BASE_DIR="/java"


RUN set -o errexit -o nounset \
&& yum -y install git wget \
&& wget -P /usr/local https://github.com/frekele/oracle-java/releases/download/8u202-b08/$JDK_TAR \
&& echo "$JDK_MD5 /usr/local/$JDK_TAR" | md5sum -c \
&& tar -zxf /usr/local/$JDK_TAR -C /usr/local\
&& rm /usr/local/$JDK_TAR \
&& export JAVA_HOME=/usr/local/$JDK_DIR \
&& export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar \
&& export PATH=$PATH:$JAVA_HOME/bin \
&& echo "git clone" \
&& mkdir -p $TMP_DIR \
&& cd $TMP_DIR \
&& git clone https://github.com/protocol/java.git \
&& cd java \
&& git checkout master \
&& ./gradlew build -x test \
&& cd build/distributions \
&& unzip -o java-1.0.0.zip \
&& mv java-1.0.0 $BASE_DIR \
&& wget -P $BASE_DIR/config https://raw.githubusercontent.com/protocol/deployment/master/main_net_config.conf
&& rm -rf $TMP_DIR \
&& rm -rf ~/.gradle \
&& mv $JAVA_HOME/jre /usr/local \
&& rm -rf $JAVA_HOME \
&& yum clean all

解决后的写法

将wget拆出来,单独写一个 RUN 执行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
FROM centos7/centos7

ENV TMP_DIR="/build"
ENV JDK_TAR="jdk-8u202-linux-x64.tar.gz"
ENV JDK_DIR="jdk1.8.0_202"
ENV JDK_MD5="0029351f7a946f6c05b582100c7d45b7"
ENV BASE_DIR="/java"


RUN set -o errexit -o nounset \
&& yum -y install git wget \
&& wget -P /usr/local https://github.com/frekele/oracle-java/releases/download/8u202-b08/$JDK_TAR \
&& echo "$JDK_MD5 /usr/local/$JDK_TAR" | md5sum -c \
&& tar -zxf /usr/local/$JDK_TAR -C /usr/local\
&& rm /usr/local/$JDK_TAR \
&& export JAVA_HOME=/usr/local/$JDK_DIR \
&& export CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar \
&& export PATH=$PATH:$JAVA_HOME/bin \
&& echo "git clone" \
&& mkdir -p $TMP_DIR \
&& cd $TMP_DIR \
&& git clone https://github.com/protocol/java.git \
&& cd java \
&& git checkout master \
&& ./gradlew build -x test \
&& cd build/distributions \
&& unzip -o java-1.0.0.zip \
&& mv java-1.0.0 $BASE_DIR \
&& rm -rf $TMP_DIR \
&& rm -rf ~/.gradle \
&& mv $JAVA_HOME/jre /usr/local \
&& rm -rf $JAVA_HOME \
&& yum clean all

RUN wget -P $BASE_DIR/config https://raw.githubusercontent.com/protocol/deployment/master/main_net_config.conf

官方文档
https://docs.docker.com/develop/develop-images/dockerfile_best-practices/