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

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

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

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

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Docker

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

Q&A

解決済

3回答

7412閲覧

コンテナに入る際に、「bash」などと入力しなくてはならない理由

study_111

総合スコア82

bash

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

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Docker

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

0グッド

0クリップ

投稿2020/07/27 05:27

編集2020/07/27 08:02

docker-composeで作成したコンテナに入る際に、docker-compose exec app bashとすればappコンテナに入ることが出来ますが、docker-compose exec app このコマンドではコンテナに入ることが出来ません。
ドキュメントを見てみると、「コンテナ名」の次には「コマンド」を入力するようになっています。
しかし、「bash」スクリプトを実行する訳ではなく、コンテナに入るだけであるのに何故「bash」を付ける必要があるのでしょうか...?

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

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

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

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

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

guest

回答3

0

ベストアンサー

「bash」スクリプトを実行する訳ではなく、
コンテナに入るだけであるのに何故「bash」を付ける必要があるのでしょうか...?

bash は実行します

実験

たとえば、手元でターミナルを開いてみましょう
そこで bash コマンドを実行すると、一見何も起きていないように見えます:

console

1$ bash 2$

ところが、exit コマンドを実行しても、2 回入力しないとターミナルは終了しません:

console

1$ exit 2$ exit

bash コマンドを実行することで、シェルを起動し、
起動したシェル入力にターミナルを割り当てているために、
このようなふるまいになります

bash スクリプト実行時とのふるまいの違いについて

bash コマンドでは、bashスクリプトを実行するときは
例えば -c オプションでスクリプトを入力したり、

console

1$ bash -c "echo aaaa" 2aaaa

または、実行したいスクリプトのファイルを指定します

bash:test.sh

1#!/usr/bin/env bash 2echo "test"

console

1$ bash test.sh 2test

この場合はシェルで処理が即座に実行され、シェル入力はターミナルに割り当てられません

docker-compose exec の詳細

ところで、
質問欄のドキュメントは Docker Compose のドキュメントではなく
Docker のドキュメントです

Docker Compose の exec コマンドのドキュメントは次のページです:
docker-compose exec | Docker Documentation

This is the equivalent of docker exec.
With this subcommand you can run arbitrary commands in your services.
Commands are by default allocating a TTY,
so you can use a command such as docker-compose exec web sh
to get an interactive prompt.

これは大体次のような意味です:

これは docker exec に相当します。
このサブコマンドを使用すると、サービスで任意のコマンドを実行できます。
コマンドはデフォルトでTTYを割り当てるため、
例えば docker-compose exec web sh というように
コマンドを使用してインタラクティブなプロンプトを取得できます。

投稿2020/07/27 07:42

編集2020/07/27 13:44
y_shinoda

総合スコア3272

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

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

study_111

2020/07/27 08:00

ご回答頂きまして、ありがとうございます。 ご丁寧に、教えて頂きましたおかげで理解することが出来ました。 シェルについての理解など曖昧だったのですが、段階的な分かりやすいご解説で、助かりました。
guest

0

コンテナに入るだけ

「入る」とは?
コンテナ環境でBashを対話型で実行したいなら、bashと書きます。
そうじゃなくて、何かのコマンドを単発で実行したいのなら、そのコマンドを書きます。lsとか。

投稿2020/07/27 05:45

otn

総合スコア85901

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

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

0

「コンテナ名」の次には「コマンド」を入力するようになっています。

そのとおりです。コンテナ内でbash対話シェルとして実行しています。

投稿2020/07/27 05:29

maisumakun

総合スコア146018

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

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

maisumakun

2020/07/27 05:32

「コンテナに入る」といって開いたコンソール自体が、実行中のbashコマンドです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問