web-dev-qa-db-ja.com

新しい行を保持しながら、Dockerfileに複数行のコマンドを書く方法は?

Dockerfileに次のRUNコマンドを書きたいです。ただし、Dockerは新しい行を保持していません。

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

そんなこと知ってる \は、各行の末尾にある新しい行をエスケープします。しかし、新しい行を保存しながら複数の行を書く方法はありますか?

47

$'でコマンドを開始し、'で終了し、次のように改行に\n\を使用します。

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
82
Daniel Zolnai

printfを使用しました。 「\ n」を使用してすべてのテキストを1行で記述します。

実行中:

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

挿入物:

example
text
here

example.txtに

25
CTodea

次を使用できます。

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

これにより、ファイルの内容を簡単に確認できます。すべての行を\で終了し、必要に応じて\nを挿入する必要があることに注意する必要があります。

6
Paulo Fidalgo

役立つかもしれません( 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