#(nop)在泊坞历史中意味着什么?

时间:2016-12-23 09:45:27

标签: docker

列出#(nop)时,docker history前缀的含义是什么?

$ docker history swarm
IMAGE               CREATED             CREATED BY   
c54bba046158        9 days ago          /bin/sh -c #(nop) CMD ["--help"]

2 个答案:

答案 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命令,但是如果执行将失败。