Bagaimana saya membuat komentar di Dockerfile?


407

Saya sedang menulis Dockerfile. Apakah ada cara untuk membuat komentar di file ini?

Apakah Docker memiliki opsi komentar yang mengambil sisa baris dan mengabaikannya?

Jawaban:


517

Anda dapat menggunakan # sebagai awal dari baris untuk mengomentari baris .

# Everything on this line is a comment

Catatan: # sebagai komentar hanya dapat digunakan di awal baris.


9
Jadi jawaban untuk pertanyaan kedua, "Apakah Docker memiliki opsi komentar yang mengambil sisa baris dan mengabaikannya?" , Tidak? " Docker memperlakukan baris yang dimulai dengan # sebagai komentar " .
Peter Mortensen

1
Bisakah Anda memperbarui jawaban Anda dan membuatnya lebih komprehensif / lengkap? Misalnya, menjawab pertanyaan kedua.
Peter Mortensen

8
Jawaban BMitch mengisi informasi penting yang tidak ada dalam jawaban ini.
Jonathan

99

Seperti yang telah disebutkan orang lain, komentar direferensikan dengan #dan didokumentasikan di sini . Namun, tidak seperti beberapa bahasa, #harus di awal baris. Jika mereka terjadi sebagian jalan melalui garis, mereka ditafsirkan sebagai argumen dan dapat mengakibatkan perilaku yang tidak terduga.

# This is a comment

COPY test_dir target_dir # This is not a comment, it is an argument to COPY

RUN echo hello world # This is an argument to RUN but the shell may ignore it

Perlu juga dicatat bahwa arahan parser baru-baru ini ditambahkan ke Dockerfile yang memiliki sintaksis yang sama dengan komentar. Mereka harus muncul di bagian atas file, sebelum ada komentar atau perintah lain. Awalnya, arahan ini ditambahkan untuk mengubah karakter pelarian untuk mendukung Windows:

# escape=`

FROM microsoft/nanoserver
COPY testfile.txt c:\
RUN dir c:\

Baris pertama, meskipun tampaknya komentar, adalah pengarah parser untuk mengubah karakter escape menjadi backtick sehingga COPYdan RUNperintah dapat menggunakan backslash di path. Arahan parser juga digunakan dengan BuildKit untuk mengubah parser frontend dengan sebuah syntaxgaris. Lihat sintaks eksperimental untuk detail lebih lanjut tentang bagaimana ini digunakan dalam praktik.

Dengan perintah multi-baris, baris yang dikomentari diabaikan, tetapi Anda perlu mengomentari setiap baris secara terpisah:

$ cat Dockerfile
FROM busybox:latest
RUN echo first command \
# && echo second command disabled \
 && echo third command

$ docker build .
Sending build context to Docker daemon  23.04kB
Step 1/2 : FROM busybox:latest
 ---> 59788edf1f3e
Step 2/2 : RUN echo first command  && echo third command
 ---> Running in b1177e7b563d
first command
third command
Removing intermediate container b1177e7b563d
 ---> 5442cfe321ac
Successfully built 5442cfe321ac

3
+1 untuk menyebutkan "harus di awal baris" . Bagaimana dengan kelanjutan garis? Jika baris komentar diakhiri dengan \, apakah baris berikutnya juga akan menjadi komentar? Dengan kata lain, jika perintah multi-baris harus dikomentari, apakah semua baris harus mulai dengan #atau hanya baris pertama? Sebuah percobaan menunjukkan itu adalah yang pertama. Jawaban ini bisa dimutakhirkan untuk mencakup hal itu juga (menjadikannya lebih hebat).
Peter Mortensen

1
@PeterMortensen Komentar diperlukan pada setiap baris, buruh pelabuhan benar-benar mengabaikan semuanya hingga linefeed. Yang menarik bagi saya adalah bahwa perintah multi-line dapat menjangkau seluruh komentar.
BMitch

19

Menggunakan # sintaks untuk komentar

Dari: https://docs.docker.com/engine/reference/builder/#format

# My comment here
RUN echo 'we are running some cool things'

2
tetapi bisakah kita mengomentari baris yang sama dengan RUN, COPY, MAINTAINER, dll?
Alexander Mills

@AlexanderMills Ya menurut dokumen yang saya ADD . $foo # ADD . /bar
tautkan dengan

2
@AlexanderMills mencatat bahwa mengubah komentar di akhir baris akan menyebabkan buruh pelabuhan untuk memutarkan kembali baris itu pada build buruh pelabuhan, karena "baris telah berubah". Ini bisa bermanfaat dan / atau mengganggu
Phylliida

Poin yang sangat bagus, mungkin buruh pelabuhan harus mengabaikan komentar lol
Alexander Mills

Itu adalah fitur dan bug, saya kira Docker akan menganggapnya sebagai fitur, dan saya pikir itu masuk akal sebenarnya
Alexander Mills

4

Komentar Dockerfile dimulai dengan '#', seperti halnya Python. Ini adalah contoh yang bagus ( kstaken / dockerfile-contoh ):

# Install a more-up-to date version of MongoDB than what is included in the default Ubuntu repositories.

FROM ubuntu
MAINTAINER Kimbro Staken

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
RUN echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | tee -a /etc/apt/sources.list.d/10gen.list
RUN apt-get update
RUN apt-get -y install apt-utils
RUN apt-get -y install mongodb-10gen

#RUN echo "" >> /etc/mongodb.conf

CMD ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"] 

Ya, tetapi tidak seperti Python bukan bagian dari baris dengan perintah di awal baris? Anda mungkin ingin memperbarui jawaban Anda.
Peter Mortensen

hanya sebuah catatan: MAINTAINER sudah usang, sekarang disarankan untuk menggunakan label:LABEL maintainer="foo@abc.com"
Alexei Martianov

3

Docker memperlakukan baris yang dimulai dengan # sebagai komentar, kecuali jika baris tersebut adalah arahan parser yang valid. Penanda # di tempat lain dalam suatu baris diperlakukan sebagai argumen.

contoh kode:

# this line is a comment

RUN echo 'we are running some # of cool things'

Keluaran:

we are running some # of cool things

2

Format

Berikut adalah format Dockerfile:

Kita dapat menggunakan #untuk tujuan berkomentar #Commentmisalnya

#FROM microsoft/aspnetcore
FROM microsoft/dotnet
COPY /publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "WebApp.dll"]

Dari file di atas ketika kita membangun buruh pelabuhan, ia melompati baris pertama dan pergi ke baris berikutnya karena kami telah berkomentar menggunakan #

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.