まだまだ初学者なものでDockerの仕組みはだいたい分かったものの、docker run
コマンドやdocker start
コマンドを実行してもコンテナが立ち上がらない問題に衝突しました。ここではいろいろ試行錯誤した話や問題の解決法に関して記述していきたいと思います。
作業環境
OS: Windows 10 Home 22H2
Docker: ver.24.0.6
Windows PowerShell: ver.5.1.19041.3031
前提知識
Dockerを扱う上での前提として、個人的にはこの記事が図解も含めて一番分かりやすかったです。
Dockerとは一体何なんだ?【初心者向け】 - RAKUS Developers Blog | ラクス エンジニアブログ
https://tech-blog.rakus.co.jp/entry/20221007/docker
Dockerに関してよく分からない方は上記を参照すると良いでしょう。
発生事例
上記の前提を踏まえた上で、docker run
コマンドやdocker start
コマンドを実行すれば、うまくコンテナが立ち上がるはず…(と思っていたんです)。
まぁ、ものは試し。早速試してみましょう。まずはdocker run
コマンドから。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
// この段階ではイメージが全くないことが分かります。
> docker run centos:centos7
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 eeb6ee3f44bd 2 years ago 204MB
// docker runコマンドを実行したことでCentOSのイメージが入ったことが確認できます。
// それでは、Dockerコンテナの状態がどうなっているか見てみましょう。
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
// おや?起動中のコンテナが表示されるはずなのに、起動中のコンテナが全くないことが分かります。
// 一応、停止中も含めたすべてのコンテナを見てみることにしましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c4eb34decc1 centos:centos7 "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago ecstatic_jemison
// コンテナはしっかり作成できていますがExited(0)となっており、停止中になっていることが分かりました。なぜ?
次にdocker start
コマンドを試してみましょう。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
// この段階ではイメージが全くないことが分かります。
// 先ほど入れたイメージは一旦削除しました
> docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview centos:centos7
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 eeb6ee3f44bd 2 years ago 204MB
// docker pullコマンドを実行したことでCentOSのイメージが入ったことが確認できます。
// しかし、コンテナ自体はまだ作成されていません。
// 一応、確認しておきましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
// やはりコンテナはまだ何も作成されていません。
// それでは、コンテナを作ってみましょう。
> docker create centos:centos7
42412a08dbb1c2e8b81651e11120fa544e7bbc64ecd9612e2a889ca48af7df08
// docker createコマンドを実行したことでコンテナが作成されたはずです。確認してみましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42412a08dbb1 centos:centos7 "/bin/bash" 3 minutes ago Created blissful_joliot
// コンテナがしっかり作成されていることが分かります。
// 当たり前ですが、この時点ではまだコンテナは起動していません。
// それでは、コンテナを起動させてみましょう
> docker start blissful_joliot
blissful_joliot
// コンテナを起動できたでしょうか?確認してみましょう。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42412a08dbb1 centos:centos7 "/bin/bash" 11 minutes ago Exited (0) About a minute ago blissful_joliot
// やはりExited(0)となっており、コンテナを起動できていません。なぜ?
コンテナを起動するまでの流れをおさらい
docker run
コマンドもdocker start
コマンドもやろうとしていることは同じです。
①docker runコマンド
docker run
コマンドは以下の3つの操作をまとめて実行するコマンドです。
・Dockerイメージの取得(docker pull
)
・DockerイメージからDockerコンテナを作成(docker create
)
・作成したDockerコンテナを起動(docker start
)←ここで問題発生?
②docker startコマンド
1.docker pull
コマンドを実行し、Dockerイメージを取得する
2.docker create
コマンドを実行し、DockerイメージからDockerコンテナを作成する
3.docker start
コマンドを実行し、作成したDockerコンテナを起動する←ここで問題発生?
解決策
𝕏(旧Twitter)にて解決策が分からなくて困っている旨を投稿した際に、とある有志の方が解決策を教えてくださいました。参考サイトも提示していただきました。ありがとうございます。
①docker runコマンド
Dockerコンテナをずっと起動しておく - WEB開発ノート
https://utouto97.hatenablog.com/entry/2022/03/15/092924
上記URLによると、docker run
コマンドにオプションコマンドが必要とのこと。具体的には以下のように実行すればいいようです。
docker run -itd (コンテナ名)
実際に実行してみましょう。
> docker run -itd centos:centos7
Unable to find image 'centos:centos7' locally
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
38c774868e5809cc276d3312b8f0ca786fdce7768b304ac779f4014a0f336378
// さて、ホントにDockerコンテナを起動できているのでしょうか?
// まずは、Dockerイメージの確認をします。
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 eeb6ee3f44bd 2 years ago 204MB
// 上手く入ってますね。
// 次に、起動中のDockerコンテナのみを表示させてみましょう。
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
38c774868e58 centos:centos7 "/bin/bash" 4 minutes ago Up 4 minutes interesting_lalande
//上手く起動できているようです。成功ですね!!
-itd
がオプションにあたります。それぞれのオプション-i
と-t
と-d
を合体させて-itd
です。
公式リファレンスでオプションの詳細を読むことはできますが、私にはチンプンカンプンだったのでとりあえずすっ飛ばします。(一応、公式リファレンスのURLだけ貼っておきます。PowerShellでdocker run --help
を実行しても、オプションに関して閲覧することができます。)
Docker run リファレンス
https://docs.docker.jp/engine/reference/run.html
②docker startコマンド(失敗)
私は最初、docker start
コマンドに問題があるのではないかと思って、docker start
コマンドにオプションをつけてみました。しかし、調べてみると分かることなのですが、docker start
コマンドに-i
オプションはあるものの、-t
と-d
のオプションはないことが分かりました。(一応、docker start
コマンドの公式リファレンスのURLも貼っておきます。PowerShellでdocker start --help
を実行しても、オプションに関して閲覧することができます。)
Docker start リファレンス
https://docs.docker.jp/engine/reference/commandline/start.html
では、オプション-i
だけなら?結論を言うと、コンテナを起動させることはできません。
③docker createコマンド
docker start
コマンドではDockerコンテナを起動させることはできない…。ではどうすれば?
いろいろ調べていると以下の記事を見つけました。
docker startコマンドの使い方(実例で解説)
https://www.memotansu.jp/docker/609/
上記の記事をもとにdocker create
コマンドにオプションをつけてみたら上手くいくのでは?という予測に思い至りました。結論を言えばこれが正解です。あとはどのオプションをつければよいか?
docker create
コマンドはたくさんありますが。-d
オプションはありません。つけるべきオプションは-it
ですね。なので以下のようなコマンドを実行すればよいです。
docker create -it (イメージ名)
一応、docker create
コマンドの公式リファレンスのURLも貼っておきます。PowerShellでdocker create --help
を実行しても、オプションに関して閲覧することができます。
Docker create リファレンス
https://docs.docker.jp/engine/reference/commandline/create.html#id13
それでは実演してみましょう。(Dockerイメージが全くない状態から始めます。)
// まずはいつも通りDockerイメージを入れます。
> docker pull centos:centos7
centos7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
What's Next?
View a summary of image vulnerabilities and recommendations → docker scout quickview centos:centos7
// 次に上述したオプションを組み入れたコマンドを使って、Dockerコンテナを作成します。
> docker create -it centos:centos7
5cb97bf23cc4e3382ed72aebb0b328d4579e963582b8a95f7b1177e308f70861
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cb97bf23cc4 centos:centos7 "/bin/bash" 3 minutes ago Created youthful_poitras
// これでDockerコンテナが作成されていることが分かりました。
// 最後に作成したDockerコンテナを起動します。ホントに起動できるでしょうか?
> docker start youthful_poitras
youthful_poitras
// 確認します。
> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cb97bf23cc4 centos:centos7 "/bin/bash" 8 minutes ago Up About a minute youthful_poitras
// STATUSがUpになっているので起動できています。成功です!
終わりに
たぶん、今回私が記述したことはDockerの基礎だと思うので、多くの方には需要のない記事かもしれませんが、私はまだまだ初学者なので…。同じような問題でもしも困っている方がいたら、その方に届けばいいなぁと思っています。それではそれでは~!Goodbye!!!
参考
Dockerとは一体何なんだ?【初心者向け】 - RAKUS Developers Blog | ラクス エンジニアブログ
https://tech-blog.rakus.co.jp/entry/20221007/docker
Dockerコンテナをずっと起動しておく - WEB開発ノート
https://utouto97.hatenablog.com/entry/2022/03/15/092924
Docker run リファレンス
https://docs.docker.jp/engine/reference/run.html
Docker start リファレンス
https://docs.docker.jp/engine/reference/commandline/start.html
docker startコマンドの使い方(実例で解説)
https://www.memotansu.jp/docker/609/
Docker create リファレンス
https://docs.docker.jp/engine/reference/commandline/create.html#id13