ฉันจะแสดงความคิดเห็นใน Dockerfile ได้อย่างไร


406

ฉันกำลังเขียน Dockerfile มีวิธีในการแสดงความคิดเห็นในไฟล์นี้หรือไม่?

นักเทียบท่ามีตัวเลือกความคิดเห็นที่ใช้เวลาที่เหลือของบรรทัดและละเว้นหรือไม่?

คำตอบ:


515

คุณสามารถใช้เป็น # เริ่มต้นของเส้นที่จะแสดงความคิดเห็นบรรทัด

# Everything on this line is a comment

หมายเหตุ: #เป็นความคิดเห็นสามารถใช้ได้ที่จุดเริ่มต้นของบรรทัดเท่านั้น


9
ดังนั้นคำตอบสำหรับคำถามที่สอง"นักเทียบท่ามีตัวเลือกความคิดเห็นที่ใช้เวลาที่เหลือของบรรทัดและไม่สนใจหรือไม่" คือไม่ " หางเส้นขนมที่ขึ้นต้นด้วย # เป็นความคิดเห็น "
Peter Mortensen

1
คุณสามารถอัปเดตคำตอบของคุณและทำให้มันครอบคลุมมากขึ้น / สมบูรณ์ ตัวอย่างเช่นการตอบคำถามที่สอง
Peter Mortensen

8
คำตอบของ BMitchจะเติมข้อมูลที่สำคัญที่ขาดหายไปในคำตอบนี้
Jonathan

99

เป็นคนอื่นได้กล่าวถึงความคิดเห็นที่มีการอ้างอิงด้วย#และได้รับการบันทึกไว้ที่นี่ อย่างไรก็ตามแตกต่างจากบางภาษา#จะต้องอยู่ที่จุดเริ่มต้นของบรรทัด หากเกิดขึ้นระหว่างทางส่วนหนึ่งจะถูกตีความว่าเป็นอาร์กิวเมนต์และอาจส่งผลให้เกิดพฤติกรรมที่ไม่คาดคิด

# 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

ควรสังเกตว่าคำสั่ง parserเพิ่งถูกเพิ่มไปยัง Dockerfile ซึ่งมีไวยากรณ์เหมือนกับข้อคิดเห็น พวกเขาจะต้องปรากฏที่ด้านบนของไฟล์ก่อนที่จะแสดงความคิดเห็นหรือคำสั่งอื่น ๆ เริ่มแรกคำสั่งนี้ถูกเพิ่มเข้ามาเพื่อเปลี่ยนตัวละครยกเว้นเพื่อรองรับ Windows:

# escape=`

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

บรรทัดแรกในขณะที่ดูเหมือนว่าเป็นความคิดเห็นเป็นคำสั่ง parser เพื่อเปลี่ยนอักขระหลบหนีเป็น backtick เพื่อให้คำสั่งCOPYและRUNสามารถใช้เครื่องหมายแบ็กสแลชในพา ธ ตัวแยกวิเคราะห์คำสั่งยังใช้กับBuildKitเพื่อเปลี่ยนตัวแยกวิเคราะห์ส่วนหน้าด้วยsyntaxบรรทัด ดูไวยากรณ์ทดลองสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการใช้ในทางปฏิบัติ

ด้วยคำสั่งหลายบรรทัดบรรทัดที่คอมเม้นต์จะถูกละเว้น แต่คุณต้องคอมเม้นต์ทุกบรรทัดทีละตัว:

$ 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 สำหรับการกล่าวขวัญ"จะต้องเป็นจุดเริ่มต้นของเส้น" แล้วความต่อเนื่องของสายล่ะ หากบรรทัดความคิดเห็นลงท้ายด้วย \ บรรทัดถัดไปจะเป็นความคิดเห็นด้วยหรือไม่ กล่าวอีกนัยหนึ่งถ้าคำสั่งหลายบรรทัดถูกใส่เครื่องหมายความคิดเห็นทุกบรรทัดจะต้องเริ่มต้นด้วย#หรือเฉพาะบรรทัดแรกหรือไม่ การทดลองแสดงให้เห็นว่ามันเป็นอดีต คำตอบนี้อาจได้รับการอัปเดตเพื่อให้ครอบคลุมเช่นกัน (ทำให้ดียิ่งขึ้น)
Peter Mortensen

1
@PeterMortensen ความคิดเห็นที่จำเป็นในแต่ละบรรทัดนักเทียบท่าจะไม่สนใจทุกอย่างจนถึง linefeed สิ่งที่น่าสนใจสำหรับฉันคือคำสั่งหลายบรรทัดสามารถครอบคลุมความคิดเห็นได้
BMitch

19

ใช้#ไวยากรณ์สำหรับความคิดเห็น

จาก: https://docs.docker.com/engine/reference/builder/#format

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

2
แต่เราสามารถแสดงความคิดเห็นในบรรทัดเดียวกับ RUN, COPY, MAINTAINER และอื่น ๆ ได้หรือไม่?
Alexander Mills

@AlexanderMills ใช่ตามเอกสารที่ฉันเชื่อมโยงกับความคิดเห็นแบบอินไลน์มีผลใช้งานแล้ว ADD . $foo # ADD . /bar
edhurtig

2
@AlexanderMills โปรดทราบว่าการเปลี่ยนความคิดเห็นในตอนท้ายของบรรทัดจะทำให้นักเทียบท่าทำการรันบรรทัดนั้นอีกครั้งบนตัวสร้างนักเทียบท่าเพราะ "ไลน์เปลี่ยนไป" สิ่งนี้อาจเป็นประโยชน์และ / หรือน่ารำคาญ
Phylliida

จุดที่ดีมากบางทีนักเทียบท่าควรเพิกเฉยความคิดเห็นฮ่า ๆ
Alexander Mills

นั่นเป็นทั้งฟีเจอร์และจุดบกพร่องฉันเดาว่า Docker จะพิจารณาฟีเจอร์นี้และฉันคิดว่ามันสมเหตุสมผลจริง ๆ
Alexander Mills

4

ความคิดเห็น Dockerfile เริ่มต้นด้วย '#' เช่นเดียวกับ Python นี่เป็นตัวอย่างที่ดี (ตัวอย่างkstaken / dockerfile- ):

# 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"] 

ใช่ แต่ไม่เหมือนกับส่วนที่เหลือของไพ ธ อนส่วนที่เหลือของบรรทัดด้วยคำสั่งในตอนต้นของบรรทัด? คุณอาจต้องการอัพเดทคำตอบของคุณ
Peter Mortensen

เพียงแค่ทราบ: MAINTAINER เลิกใช้แล้วตอนนี้แนะนำให้ใช้ป้ายกำกับ:LABEL maintainer="foo@abc.com"
Alexei Martianov

2

รูปแบบ

นี่คือรูปแบบของ Dockerfile:

เราสามารถใช้#เพื่อแสดงความคิดเห็น#Commentตัวอย่างเช่น

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

จากไฟล์ด้านบนเมื่อเราสร้างนักเทียบท่ามันข้ามบรรทัดแรกและไปที่บรรทัดถัดไปเพราะเราได้แสดงความคิดเห็นโดยใช้ #


2

นักเทียบท่าถือว่าบรรทัดที่ขึ้นต้นด้วย #เป็นความคิดเห็นยกเว้นบรรทัดนั้นเป็นคำสั่ง parser ที่ถูกต้อง เครื่องหมาย # ที่ใดก็ได้ในบรรทัดถือเป็นอาร์กิวเมนต์

ตัวอย่าง:

# this line is a comment

RUN echo 'we are running some # of cool things'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.