2017-08-03 38 views
0

私のアプリケーションでドッカーを開発する必要があります。私はmaven-docker-pluginでドッキング・イメージを作成します。その後、私はshスクリプトを実行します。Dockerコンテナが非同期で実行されます

docker run --name app-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=app -d mysql 
docker run --name app -p --link app-mysql:localhost -d app 
docker run --name app-nginx -d -p 80:80 --link app:app nginx 
docker exec app-nginx rm -rf /etc/nginx/conf.d/default.conf 
docker cp app:/default.conf default.conf 
docker cp default.conf app-nginx:/etc/nginx/conf.d/default.conf 
docker restart app-nginx 

しかし、私には問題があります。最初のmysqlコンテナはうまく動作します。次に、アプリケーションコンテナがうまく動作します。しかし、nginxのコンテナがエラーをスロー:私はコマンドを使用してコンテナ間

sleep 120 

をこのスクリップを実行する場合、私はアプリのコンテナが終了する前にnginxのコンテナの実行を理解し

docker: Error response from daemon: Cannot link to a non running container: /app AS /app-nginx/app. 

それは、通常のセットアップ。それはハードコードされているので、スリープコマンドなしでコンテナを実行する方法はありますか?コンテナが正常に終了した場合、どのようにして計算できますか?解決策を教えてくれますか?

答えて

0

ドッカーのようなものを使用することをお勧めします。しかし、あなたはまだあなたのコードで管理することができます。キーは、コンテナを開始しますが、まずそれを作成してから、またそれを

docker run --name app-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=app -d mysql 
docker run --name app -p --link app-mysql:localhost -d app 
docker create --name app-nginx -d -p 80:80 --link app:app nginx 
docker cp app:/default.conf app-nginx:etc/nginx/conf.d/default.conf 
docker start app-nginx 

を開始しない--linkは廃止され、使用すべきではありません。 docker network createを使用してネットワークを作成し、次にそのネットワークを--netを使用してコンテナに割り当てる必要があります。 docker-composeは自動的にあなたのためにこれらの多くのことを行います。そのため、その代わりにそれを使用する方が理にかなっています。

関連する問題