質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

4556閲覧

alpine で ログインスクリプトを実行することはできますか

teityura

総合スコア84

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/05/08 13:14

編集2021/06/19 11:22

やりたいこと

普段使っているログインスクリプト(~/.bashrc)を
alpine のコンテナでも利用したいです。

  • ログインスクリプトを利用できるか
  • 利用する方法

などご教示いただきたいです。

試したこと

カレントディレクトリに .bashrc がある状態で、
alpine コンテナを起動して、/etc/profile にマウントしてみましたが、
alias が 効いてないようでした。

また、sourceコマンドで、

# ログインスクリプトをマウントして、alpineコンテナを起動 docker run -it --rm --name tmp -v `pwd`/.bashrc:/etc/profile alpine /bin/sh # sourceで読み込んでみる source /etc/profile # aliasが効いていない l /bin/sh: l: not found

.bashrc の内容の一部

#=============================================================================== # Add alias #=============================================================================== alias .='pwd' alias ..='cd ../' alias ...='cd ../../' alias ....='cd ../../../' alias .....='cd ../../../../' alias ......='cd ../../../../../' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias grep='grep --color=always' case "${OSTYPE}" in darwin*) alias l="ls -alG" alias ll="ls -alG" alias lll="ls -alG" alias ls="ls -G" ;; linux*) alias l='ls -al --color=always' alias ll='ls -al --color=always' alias lll='ls -al --color=always' alias ls="ls --color=always" ;; esac

回答いただいた bash をインストールする方法を使ってみました。

/bin/ash で色々やるより、bashを入れてしまった方が都合がよかったです。
alpineコンテナが最高に使いやすくなりました!

docker build -t my-alpine:3.12 -<< 'EOF' FROM alpine:3.12 RUN set -x && \ apk add --no-cache bash git && \ mkdir -p ~/git && \ cd ~/git/ && \ git clone https://github.com/teityura/dotfiles.git && \ cd dotfiles/ && \ ./copy-dotfiles.sh ENTRYPOINT ["bash"] EOF

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Docker Hub で配布されている Alpine Linux は、初期状態では bash が使えません。そのため、.bashrc を読み込もうとしても反映されていないのが現状です。

( alpine イメージは、コンテナ起動後のシェルが /bin/ash というシェルスクリプトが指定されています。実体としては /bin/busybox が実行されていますが、どちらにしろ今のままでは bash は実行できません)

解決方法としては、いくつかあります。ひとまず bash が入った Docker イメージを作る方法が、確実かつ手っ取り早いと思います。

まず Dockerfile を準備して、自動的に bash が入っている状態、かつ、bash を自動的に実行する Docker イメージを作ります。

Dockerfile

1FROM alpine:latest 2RUN apk add --no-cache bash 3ENTRYPOINT ["bash"]

それから、 docker build -t myalpine . と実行すると、 myalpine という名前で Docker イメージを作ります。

これで docker run myalpne とすると、bash が入った Alpine Linux の環境を使えます。

次に、 .bashrc を準備したディレクトリで、次の様にコマンドを実行すると期待通りの動作になります( bash に対して --login オプションを与えます)。

$ docker run -it --rm --name tmp -v `pwd`/.bashrc:/etc/profile myalpine --login bash-5.1# . /

投稿2021/05/16 05:05

zembutsu

総合スコア1584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2021/06/19 11:23

回答ありがとうございます! bashをインストールする方法を試して、 最高に使いやすいalpine環境ができあがりました。
guest

0

alpineの標準shellはashなので.bashrcは読み込まれません
詳しくはこちらをどうぞ
https://teratail.com/questions/204015

投稿2021/05/08 15:23

taC-h

総合スコア289

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2021/05/13 15:45

--loginオプションの使い方が分かりませんでした。 手元のDocker 20.10.5ではrunのloginオプションは無いようでした。 ドキュメントにも見当たりませんでしたので、 古いバージョンとかで使えたものなのでしょうか。 https://docs.docker.jp/engine/reference/run.html
taC-h

2021/05/15 16:54

--loginはashのオプションです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問