"空的延续线将成为错误"......我现在该如何评论我的Dockerfile?

Bir*_*abs 18 docker dockerfile

考虑以下Dockerfile:

FROM alpine:edge

EXPOSE \
# web portal
8080 \
# backdoor
8081
Run Code Online (Sandbox Code Playgroud)

像这样建造:

docker build .
Run Code Online (Sandbox Code Playgroud)

我们观察到这样的输出

Sending build context to Docker daemon  17.1TB
Step 1/2 : FROM alpine:edge
 ---> 7463224280b0
Step 2/2 : EXPOSE 8080 8081
 ---> Using cache
 ---> 7953f8df04d9
[WARNING]: Empty continuation line found in:
    EXPOSE 8080 8081
[WARNING]: Empty continuation lines will become errors in a future release.
Successfully built 7953f8df04d9
Run Code Online (Sandbox Code Playgroud)

因此,鉴于将注释放在多行部分的中间很快就会变得非法:注释多行命令的新推荐方法是什么?

这对于RUN命令尤其重要,因为我们鼓励我们&&通过命令一起减少图像层.


不确定这是什么时候引入,但我目前在版本中遇到这个问题:

 docker --version
Docker version 17.07.0-ce, build 8784753
Run Code Online (Sandbox Code Playgroud)

我正在使用Docker的边缘发布流,所以如果你使用Docker稳定,这可能还不太熟悉.

Pie*_*rre 20

除了上面其他人所说的之外(该错误可能与连续块和/或 windows cr/lf 字符 = 使用 dos2unix 内的注释有关),当您的最后一个命令以反斜杠 \ 字符结尾时,也会显示此消息。例如,如果你有这个:

RUN apt-get update \
    && apt-get upgrade \
    && apt-get -y install build-essential curl gnupg libfontconfig ca-certificates bzip2 \
    && curl -sL https://deb.nodesource.com/setup_16.x  | bash - \
    && apt-get -y install nodejs \
    && apt-get clean \
    && rm -rf /tmp/* /var/lib/apt/lists/* \
Run Code Online (Sandbox Code Playgroud)

注意末尾的最后一个 \ 。这会给你带来同样的错误:

docker [WARNING]: Empty continuation line found in:

因此,只需删除最后一个 \ 即可。


Tan*_*ury 10

17.07.0-ce开始警告空的延续线.但是,它错误地将仅注释行视为空.这在moby#35004中得到修复,并包含在17.10.0-ce中.