wake-up-neo.com

Wie schreibe ich Befehle mit mehreren Zeilen in Dockerfile, während die neuen Zeilen erhalten bleiben?

Ich möchte den folgenden RUN-Befehl in die Docker-Datei schreiben. Aber Docker behält die neuen Linien nicht bei.

RUN echo "[repo] \
name            = YUM Repository \
baseurl         = https://example.com/packages/ \
enabled         = 1 \
gpgcheck        = 0" > /etc/yum.repos.d/Repo.repoxyz

Ich weiß, dass \ am Ende jeder Zeile der neuen Zeile entgeht. Aber gibt es eine Möglichkeit, mehrere Zeilen zu schreiben, wobei die neue Zeile erhalten bleibt?

33

Starten Sie Ihren Befehl mit $', beenden Sie ihn mit ' und verwenden Sie \n\ für Zeilenumbrüche wie folgt:

RUN echo $'[repo] \n\
name            = YUM Repository \n\
baseurl         = https://example.com/packages/ \n\
enabled         = 1 \n\
gpgcheck        = 0' > /etc/yum.repos.d/Repo.repoxyz
58
Daniel Zolnai

Ich habe printf verwendet. Schreiben Sie den gesamten Text mit "\ n" in eine Zeile.

Ausführen:

RUN printf 'example \ntext \nhere' >> example.txt

einlagen:

example
text
here

in beispiel.txt

20
CTodea

Sie können verwenden:

RUN echo "\
[repo] \n\
name            = YUM Repository \n\
baseurl         = https://example.com/packages/ \n\
enabled         = 1 \n\
gpgcheck        = 0\
" > /etc/yum.repos.d/Repo.repoxyz

Auf diese Weise haben Sie eine schnelle Möglichkeit, den Inhalt der Datei zu überprüfen. Sie müssen nur wissen, dass Sie jede Zeile mit \ beenden und bei Bedarf den \n einfügen müssen.

0
Paulo Fidalgo

Vielleicht hilft es Ihnen ( https://github.com/jen-soft/pydocker )

[Dockerfile.py]

from pydocker import DockerFile  # Sudo pip install -U pydocker

d = DockerFile(base_img='debian:8.2', name='jen-soft/custom-debian:8.2')

d.RUN_bash_script('/opt/set_repo.sh', r'''
cat >/etc/apt/sources.list <<EOL
deb     http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main
EOL
apt-get clean && apt-get update
''')

d.EXPOSE = 80
d.WORKDIR = '/opt'
d.CMD = ["python", "--version"]

# d.generate_files()
d.build_img()

# Sudo wget -qO- https://get.docker.com/ | sh

python Dockerfile.py
docker images
0
jen-soft