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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

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

Q&A

解決済

1回答

849閲覧

docker run時のMySQLの自動起動

LeonhardThird

総合スコア29

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

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

0グッド

1クリップ

投稿2020/03/04 00:51

編集2020/03/04 00:56

前提・実現したいこと

Docker+Ruby+Rails+MySQLをdocker-composeを使わずに構築しております。
書籍やQiita, Teratail, stackoverflowなどをを参照に、Dockerfileを以下のように作成し、
$ docker build -t sample:1.0 該当フォルダ
でimageを作成した後、
$ docker run -it -p 9000:8000 -v /c/sw1:/sd1 --name sample1 sample:1.0 /bin/bash
をしたのですが、MySQLが自動起動してくれません。
ネット上ではstartup.shのように起動サービスをスクリプトにまとめるほうが良いと書かれていたので、
[MySQL AUTO RUN]のように記載したのですが、どこが間違っているのでしょうか?

該当のソースコード

Dockerfile

1# Create base image 2FROM ubuntu:18.04 3 4# Update in latest 5RUN apt update && apt -y upgrade && apt -y install curl 6 7# Install a libraries 8RUN apt -y install git g++ make vim build-essential libreadline-dev libssl-dev zlib1g-dev nodejs 9 10# Install ruby-build 11RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv && \ 12 echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc && \ 13 echo 'eval "$(rbenv init -)"' >> ~/.bashrc 14 15ENV PATH /root/.rbenv/shims:/root/.rbenv/bin:$PATH 16 17RUN git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build 18RUN rbenv install 2.5.1 && \ 19 rbenv global 2.5.1 20 21ENV RUBYOPT -EUTF-8 22 23RUN gem install bundler && \ 24 gem install rails -v 5.2.3 25 26# MySQL 27RUN apt-get install libmariadb-dev -y && \ 28 apt install mysql-server-5.7 -y && \ 29 gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' 30 31RUN mkdir /home/mysql && \ 32 chown mysql:mysql /home/mysql/ && \ 33 usermod -d /home/mysql/ mysql 34 35# MySQL AUTO RUN 36RUN touch /home/mysql/startup.sh && \ 37 echo '#!/bin/bash' >> /home/mysql/startup.sh && \ 38 echo 'service mysql start' >> /home/mysql/startup.sh && \ 39 chmod 755 /home/mysql/startup.sh 40 41CMD /home/mysql/startup.sh 42

補足情報

Windows 10 Home 64bit
Docker Toolbox

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

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

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

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

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

guest

回答1

0

ベストアンサー

http://docs.docker.jp/engine/reference/builder.html#cmd
こちらをご確認ください。

$ docker run -it -p 9000:8000 -v /c/sw1:/sd1 --name sample1 sample:1.0 /bin/bash

上記のように実行した場合、ユーザが docker run で引数を指定した時、これらは CMD で指定したデフォルトを上書きします。に該当するため、cmdで指定したstartup.shの実行ではなく、/bin/bashが実行されます。
もちろん、/bin/bashを実行した状態で、/home/mysql/startup.shを実行すると、mysqlが起動されるかもしれません。

投稿2020/03/04 04:17

t_obara

総合スコア5488

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

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

LeonhardThird

2020/03/04 05:17

素早いご回答ありがとうございます。 ということは、CMD命令を使おうが、ENTRYPOINT命令を使おうが、docker runで実行できるのは1つの命令でしか無く、もしMySQLの命令を優先すると、結局後から/bin/bashで入る必要があるということでしょうか? 実際にENTRYPOINT命令に変更して試すと、MySQLは自動起動したのですが、Quickstart Terminalの方は通常入力となってしまいました。
t_obara

2020/03/06 09:35

CMDとENTRYPOINTの違いはドキュメントを読めばわかると思うので、そちらに譲るとして、自動起動をしつつ、ターミナルを開きたいという意図でしょうか?そのようにする理由に見当が付きませんが、単に起動してから・bin/bashを呼び出すスクリプトをrunで呼べばよろしいかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問