列出#(nop)
时,docker history
前缀的含义是什么?
$ docker history swarm
IMAGE CREATED CREATED BY
c54bba046158 9 days ago /bin/sh -c #(nop) CMD ["--help"]
答案 0 :(得分:8)
NOP代表“无操作”。
Docker为每一层运行一个shell。 Dockerfile中除RUN
命令之外的所有docker命令(或层)在历史记录中显示为空命令或已注释掉的shell命令。 #
符号标记评论的开头,/bin/sh
将跳过后面的任何内容。同样,如果您输入终端:
user@machine $ echo hello world
hello world
user@machine $ #But none of these lines starting with # do anything
user@machine $ #echo hello world
非RUN
命令不需要由shell解释,而是由内部的docker处理。
如果以前运行过相同的命令,图层缓存可以使用历史记录(包括非RUN
命令)来跳过处理。
答案 1 :(得分:0)
import java.util.Scanner;
public class IntegerAverage {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int num1;
int num2;
int num3;
// Ask user
System.out.println("Input 1st number");
num1 = in.nextInt();
System.out.println("Input 2nd number");
num2 = in.nextInt();
System.out.println("Input 3rd number");
num3 = in.nextInt();
// Print answer
System.out.println("The average is:"+ ((num1 + num2 + num3)/3));
}
}
FROM ruby:2.6-alpine
ENTRYPOINT ["sleep", "infinity"]
ENV A 1
对于$ docker build -t my-useless-image .
$ docher history --no-trunc my-useless-image
... CREATED BY ...
... /bin/sh -c #(nop) ENV A=1 ...
... /bin/sh -c echo test ...
... /bin/sh -c #(nop) ENTRYPOINT ["sleep" "infinity"] ...
...
命令,它将显示其执行的shell命令,例如
RUN
对于非/bin/sh -c echo test
,RUN
后跟在该层中执行的/bin/sh -c #(nop)
命令。 Dockefile
并不是真正有用的东西,可以忽略。他们使它看起来像Shell命令,但是如果执行将失败。