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?
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
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
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.
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