1、多条指令应换行

...
RUN apt-get clean apt-get update
...

多条指令写在一行会当做一条指令执行,有可能后面的指令不执行或者报错。

应改为:

...
RUN apt-get clean \
	&& apt-get update
...

2、忽略错误继续运行

我们在使用apt-get安装一个包时,常常会因为缺少依赖而安装失败,我们可以使用apt-get install -y -f --fix-missing命令来安装上一次安装失败所需要的依赖包,可以很方便的管理所以依赖,而不用我们手动按照依赖顺序把所有依赖包安装一遍,但是必须在安装失败后执行。Dockerfile 在构建过程中如果出现报错会立即退出构建,我们可以使用逻辑或||来忽略错误继续执行后面的语句。

...
# 下载Chrome安装包
RUN wget -P /tmp https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
    # 安装Chrome失败
    && dpkg -i /tmp/google-chrome-stable_current_amd64.deb \
    # 安装Chrome的依赖
    && apt-get install -y -f --fix-missing \
    # 再次安装Chrome
    && dpkg -i /tmp/google-chrome-stable_current_amd64.deb
...

上面的写法在 Chrome 安装失败时构建会退出,改为下面的写法就可以成功构建了。

...
# 下载Chrome安装包
RUN
    wget -P /tmp https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
    # 安装Chrome失败之后安装Chrome的依赖
    && dpkg -i /tmp/google-chrome-stable_current_amd64.deb || apt-get install -y -f --fix-missing \
    # 再次安装Chrome
    && dpkg -i /tmp/google-chrome-stable_current_amd64.deb
...