web-dev-qa-db-ja.com

DockerfileでDockerコンテナのbashエイリアスを設定する方法は?

私はdockerが初めてです。 DockerfileでENV命令を使用して環境変数を設定できることがわかりました。しかし、Dockerfileで長いコマンドのbashエイリアスをどのように設定しますか?

45
np20

基本的にいつものように、ユーザーの.bashrcに追加します:

FROM foo
RUN echo 'alias hi="echo hello"' >> ~/.bashrc

いつものように、これは対話型シェルでのみ機能します:

docker build -t test .
docker run -it --rm --entrypoint /bin/bash test hi
/bin/bash: hi: No such file or directory
docker run -it --rm test bash
$ hi
hello

非対話型シェルの場合、小さなスクリプトを作成してパスに配置する必要があります。

RUN echo -e '#!/bin/bash\necho hello' > /usr/bin/hi && \
    chmod +x /usr/bin/hi

エイリアスがパラメーターを使用している場合(つまり、hi Jim-> hello Jim)、単に"$@"を追加します。

RUN echo -e '#!/bin/bash\necho hello "$@"' > /usr/bin/hi && \
    chmod +x /usr/bin/hi
91
Erik Dannenberg

既存のコマンドのエイリアスを作成するには、ln -sも使用できます。

ln -s $(which <existing_command>) /usr/bin/<my_command>

12
Laurent Magnin

コンテナ内ではなく、Dockerfileのみでエイリアスを使用する場合、最も簡単な方法はENV宣言です。

ENV update='apt-get update -qq'
ENV install='apt-get install -qq'

RUN $update && $install apt-utils \
    curl \
    gnupg \
    python3.6

そして、すでに説明したような方法でコンテナで使用する場合:

 RUN printf '#!/bin/bash \n $(which apt-get) install -qq $@' > /usr/bin/install
 RUN chmod +x /usr/bin/install

ほとんどの場合、私はエイリアスをビルド段階で使用し、コンテナ内には入りません。そのため、最初の例は、毎日の使用でより速く、より明確で、より簡単です。

3
Sonique

これをapp.dockerfileに追加しました

# setup aliases
ADD ./bashrc_alias.sh /usr/sbin/bashrc_alias.sh
ADD ./initbash_profile.sh /usr/sbin/initbash_profile
RUN chmod +x /usr/sbin/initbash_profile
RUN /bin/bash -C "/usr/sbin/initbash_profile"

そして、initbash_profile.shの中に、カスタムエイリアスを追加するだけで、.bashrcファイルを入手する必要はありません。

# add the bash aliases
cat /usr/sbin/bashrc_alias.sh >> ~/.bashrc

御worked走をしました!

別のオプションは、コンテナの外部から「docker exec -itコマンド」を使用し、独自の.bashrcまたは.bash_profile(好きなもの)を使用することです。

例えば。 docker exec -it docker_app_1 bash

1
mikoop
  1. このファイルを編集してください〜/ .bash_aliases vi ~/.bash_aliases
  2. このファイルをソース〜/ .bash_aliases source ~/.bash_aliases
  3. できた。
1
Eddy Ferreira

エントリーポイントを使用できますが、Dockerfileのエイリアスでは機能しません。

ADD dev/entrypoint.sh /opt/entrypoint.sh
ENTRYPOINT ["/opt/entrypoint.sh"]

あなたのentrypoint.sh

#!/bin/bash
set -e

function dev_run()
{

}

export -f dev_run

exec "$@"

(クイックコピー/貼り付け、申し訳ありません)

1
Thomas Decaux