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

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

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

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

Q&A

解決済

3回答

3933閲覧

Dockerを学んでいて、コンテナが起動できてない模様です。

keisuu

総合スコア40

Docker

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

0グッド

0クリップ

投稿2019/01/20 15:59

Dockerを学んでいますが起動できていないようでお力を借りればと思います。

Dockerfileを作り、
docker build
docker run
を行っても
docker ps
のところに表示されず、起動に失敗しているのかと思っています。
(Dockerfileをシンプルなものすると起動できているのは確認済み)

これはDockerfileの内容がおかしいのでしょうか?

実際に実行したコマンドはこちらです。

console

1$ docker build -t sample ./ 2$ docker run -d -p 80:80 sample

Dockerfileの内容です。

Dockerfile

1# ベースイメージの設定 2FROM centos:centos7 3 4COPY index.html /var/www/html/ 5 6RUN yum install -y epel-release 7 8RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm 9 10RUN yum install -y --enablerepo=remi,remi-php73 \ 11nginx \ 12php73 \ 13php-mbstring \ 14php73-fpm \ 15mysql \ 16php-mysql \ 17php-opcache

docker ps で何も表示されていない。

console

1$ docker ps 2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

MacのDockerクライアントを使用していてバージョンは 18.09.1です。

console

1$ docker version 2Client: Docker Engine - Community 3 Version: 18.09.1 4 API version: 1.39 5 Go version: go1.10.6 6 Git commit: 4c52b90 7 Built: Wed Jan 9 19:33:12 2019 8 OS/Arch: darwin/amd64 9 Experimental: false 10 11Server: Docker Engine - Community 12 Engine: 13 Version: 18.09.1 14 API version: 1.39 (minimum version 1.12) 15 Go version: go1.10.6 16 Git commit: 4c52b90 17 Built: Wed Jan 9 19:41:49 2019 18 OS/Arch: linux/amd64 19 Experimental: true

よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

下記に注意してください。

  • docker run時に指定するコマンドは、フォアグラウンドで動作し続ける必要がある
  • Dockerfile内でデーモンを起動することはできない

動かすための手順

1, Dockerfileと同じ階層にsetup.shみたいなシェルスクリプトを作ります
1つのコンテナで複数のデーモンを起動したい場合はシェルスクリプトファイルが必須です。

setup.sh

bash

1# mysqlのデーモン起動 2systemctl start mysql 3 4# nginxのデーモン起動 5nginx -g "daemon off;"

2,f Dockerfileの末尾に下記を追加します。

Dockerfile

1# デーモン起動用のスクリプトを実行させる 2COPY setup.sh . 3CMD ["sh", "setup.sh"]

Dockerfile の CMD で起動コマンドを指定した場合、docker run 時にコマンドが空欄の場合のデフォルトの処理として CMD で指定したコマンドが実行されます。

ですので、実行する際のコマンドについてはそのままで大丈夫です。

投稿2019/01/21 03:54

intelf___

総合スコア868

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

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

keisuu

2019/01/21 04:30

>Dockerfile内でデーモンを起動することはできない こちらご指摘ありがとうございます!
mosapride

2019/01/23 05:29 編集

centos7に限る?ことですけどsystemctlは使えなかったはずです。 ↓動かしたコンソール [root@f68041bd98f2 /]# systemctl start mariadb Failed to get D-Bus connection: Operation not permitted 蛇足1:docker開発者がCentOS7の開発者にバグだから直せと言ったが、CentOS7開発者はバグじゃないから直さない(みたいな話があった気がします。鵜呑みにはしないでくださいorz) 蛇足2:ubuntuなら起動できることを確認しました。 ↓動かしたコンソール(見にくい!!!!) root@f110da433760:/# service mysql start root@f110da433760:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 05:15 pts/0 00:00:00 bash mysql 869 1 0 05:22 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe mysql 1220 869 6 05:22 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=33root 1272 1 0 05:22 pts/0 00:00:00 ps -ef
guest

0

まず、下記のコマンドではdockerをrunしただけです。

bash

1docker run -d -p 80:80 sample

さらに、Dockerfileにcmdが存在しないため、インストールを行っただけで終了します。


bash

1docker run -it -d -p 80:80 sample bash

で起動しbashに入り、nginxを起動すればWEBサーバーは立ち上がります。

修正するには

1コンテナ1プロセス

Dockerfileにはnginxとmysqlが入っているようですが、dockerでは1コンテナ1プロセスが原則です。
nginx+phpのコンテナ、mysqlのコンテナに分けるべきです。

cmdを追記する

Dockerfileにcmdを記述します。nginx+phpなら

bash

1CMD ["nginx", "-g", "daemon off;"]

上記のようにプロセスを起動し、コンテナが終了しないように設定する必要があります。

投稿2019/01/21 02:00

mosapride

総合スコア1480

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

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

keisuu

2019/01/21 04:32

参考にさせて頂きます。 ありがとうございます。
guest

0

ベストアンサー

恐らく起動した後に待ち受けるプロセスがないためコンテナが停止状態になっているのだと思います。
起動時に-itオプションを付けて起動してみて下さい
docker run -it -d -p 80:80 sample

ちなみに docker ps で表示されるのは起動中のコンテナのみなので
docker ps -a としてみて下さい。

投稿2019/01/20 16:31

編集2019/01/20 16:32
teikoku-penguin

総合スコア314

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

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

keisuu

2019/01/21 04:33

-itオプションをつけると docker ps で確認できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問