Rumah  >  Soal Jawab  >  teks badan

Dockerfile里指定执行命令用ENTRYPOING和用CMD有何不同?

如题,我一般是用CMD来指定的,比如:

FROM thelanddownunder
MAINTAINER ProgrammingLife

CMD ["apt-get install htop"]

但是看一些Dockerfile里也有用ENTRYPOINT来指定的,就是把上面的CMD换成ENTRYPOINT,后面好像也是指定一些命令的:

FROM thelanddownunder
MAINTAINER ProgrammingLife

ENTRYPOINT ["apt-get install htop"]

请问这两种方法有什么不一样的吗?另外,还有用RUN来指定命令的,语法和上面两种又不太一样,比如这样:

FROM thelanddownunder
MAINTAINER ProgrammingLife

RUN apt-get install htop
ENTRYPOINT ["apt-get install vim"]
ringa_leeringa_lee2761 hari yang lalu785

membalas semua(2)saya akan balas

  • ringa_lee

    ringa_lee2017-04-21 10:57:46

    Masa larian adalah berbeza.

    RUN dijalankan semasa Build, sebelum CMD dan ENTRYPOINT. Selepas Build selesai dan RUN selesai, jalankan CMD atau ENTRYPOINT sekali lagi.

    Perbezaan antara ENTRYPOINT dan CMD ialah cara parameter dihantar semasa menjalankan docker run Perintah yang ditentukan oleh CMD boleh ditindih oleh arahan yang diluluskan oleh docker run Contohnya, jika dinyatakan dengan CMD:

    ...
    CMD ["echo"]
    

    Kemudian lari

    docker run CONTAINER_NAME echo foo
    

    Kemudian gema yang dinyatakan dalam CMD akan ditimpa oleh gema yang baru ditentukan, jadi ia akhirnya bersamaan dengan berjalan echo foo, jadi hasil cetakan akhir ialah:

    foo
    

    Dan ENTRYPOINT akan menghantar segala-galanya selepas nama bekas sebagai parameter kepada arahan yang ditentukan (arahan tidak akan ditimpa), seperti:

    ...
    ENTRYPOINT ["echo"]
    

    Kemudian lari

    docker run CONTAINER_NAME echo foo
    

    Kemudian echo foo selepas CONTAINER_NAME dihantar sebagai parameter kepada arahan gema yang dinyatakan dalam ENTRYPOING, jadi ia bersamaan dengan melaksanakan

    echo "echo foo"
    

    Hasil cetakan akhir ialah:

    echo foo
    

    Selain itu, dalam Dockerfile, parameter yang ditentukan oleh ENTRYPOINT lebih awal daripada parameter yang ditentukan semasa menjalankan docker run, seperti:

    ...
    ENTRYPOINT ["echo", "foo"]
    

    Laksanakan

    docker run CONTAINER_NAME bar
    

    Setara dengan melaksanakan:

    echo foo bar
    

    Hasil cetakan ialah:

    foo bar
    

    Hanya satu ENTRYPOINT boleh ditentukan dalam Dockerfile Jika banyak dinyatakan, hanya yang terakhir akan sah.

    Apabila melaksanakan arahan docker run, anda juga boleh menambah parameter -entrypoint, yang akan terus menghantar parameter yang ditentukan kepada ENTRYPOINT, contohnya:

    ...
    ENTRYPOINT ["echo","foo"]
    

    Kemudian laksanakan:

    docker run CONTAINER_NAME bar #注意没有echo
    

    Kemudian, ia bersamaan dengan melaksanakan echo foo bar, dan keputusan akhir ialah

    foo bar
    

    Saya menterjemah artikel "15 Petua Docker dalam 15 Minit" di dockboard.org, yang bercakap tentang perbezaan antara RUN, CMD dan ENTRYPOINT Anda boleh merujuknya.

    Terdapat juga siri Docker Quicktips, dan terdapat artikel di dalamnya yang juga bercakap tentang ENTRYPIONT Anda boleh lihat, pautannya di sini:
    http://www.tech-d.net/. 2014/01/27/docker- quicktip-1-entrypoint/

    Kami akan menambah terjemahan siri artikel ini ke dockboard.org tidak lama lagi, jadi nantikan.

    Selain itu, berikut ialah perihalan titik masuk dalam dokumentasi rasmi: http://docs.docker.io/en/latest/reference/builder/#entrypoint

    balas
    0
  • PHPz

    PHPz2017-04-21 10:57:46

    Dalam fail Docker, jika ENTRYPOINT dan CMD wujud, maka CMD ialah parameter ENTRYPOINT Jika tiada ENTRYPOINT, maka CMD ialah arahan pelaksanaan lalai

    balas
    0
  • Batalbalas