2016-10-05 3 views
0

後、次のDockerfileを考える:どのように私はそれが自動的に起動しますかドッキングウィンドウインタラクティブモードを終了ENTRYPOINT

Jamess-iMac:docker-python-test jameslin$ docker run -i -t 9618f71f65e4 /bin/bash 
[ ok ] Starting MySQL database server: mysqld .. 
[info] Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly.. 
Jamess-iMac:docker-python-test jameslin$ 

:私はドッキングウィンドウを実行すると

From python:2.7-wheezy 
RUN apt-get update && apt-get upgrade --assume-yes 
RUN apt-get install mysql-server --assume-yes 
ENTRYPOINT service mysql start 

、それはすぐにMySQLサーバ起動後に出ます。 mysqlは対話モードにとどまっていますか?

答えて

2

ubuntu 12.04 into docker “service mysql start”

あなたがスレッド上で読めばあなたはDockerはそれが開始すべきときに、MySQLは分かっていない任意のランレベルを持っていないことがわかります。

2つのコンテナを実行し、それらの間にneworkを作成することができます。 mysqlpythonappの1つです。ここでは、使用して新しいネットワークにコンテナを取り付けた容器を起動2つのコンテナ

docker network create <network_name> 

間のネットワークを作ることができる方法である--net=<network_name>

docker run -d --net=anetwork --name=mysql -e MYSQL_USER=ROOT -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql 

docker run --net=anetwork --name=pythonapp -it python:2.7-wheezy bash 

enter image description here

私はあなたがENTRYPOINTCMDの間で混乱していると思います。重要なポイントは、コマンドがのドッカー実行の呼び出しに供給されていても、画像が開始されたときに常にENTRYPOINTが実行されることです。コマンドを入力しようとすると、それがENTRYPOINTの引数として追加され、CMD命令で定義されたデフォルトを置き換えます。 --entrypointフラグをドッカーの実行コマンドに明示的に渡す場合にのみ、ENTRYPOINTを上書きできます。

これは、画像を/bin/bashコマンドで実行してもシェルが得られないことを意味します。むしろを引数としてservice mysql startに供給します。

Network between container ubuntu 12.04 into docker “service mysql start”

Difference Between CMD and ENTRYPOINT in Dockerfile

1

ENTRYPOINT/CMDディレクティブは長時間実行するコマンドである必要があります。 service mysql startはUbuntuで実行されている連続コマンドではないため、サービス自体を終了してコマンドを終了します。

これを簡単にするには、mysqlコンテナを実行しようとしている場合はdocker run mysqlを実行します。もしあなたが一度限りのmysqlコンテナを実行する必要があれば、デフォルトのmysqlコンテナがここから始まるようにすることができます:MySql Dockerfile - CMD ["mysqld"] - これは実際の起動コマンドと同じになります/etc/init.d/mysql

+0

が、なぜそれが対話モードだ無視されますか? –

+0

実行して停止するentrypointコマンドが実行されているためです。 –

+0

entrypointがインタラクティブモードでうまく動作しないと言っていますか? –

関連する問題