2017-08-03 13 views
0

Ich muss Docker in meiner Anwendung zu entwickeln, ich erstelle Docker Bild mit Maven-Docker-Plugin. Danach laufe ich sh shript whit is here.Docker Container laufen async

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 

Aber ich habe ein Problem. Erste mysql Container läuft gut. Zweitens läuft App-Container gut. Aber nginx Behälter wirft Fehler:

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

Wenn ich laufe dieses Scrip mit Befehl

sleep 120 

zwischen den Behältern es normalerweise Setups, wie ich nginx Behälter läuft, bevor App Container beendet verstehen. Gibt es eine Möglichkeit, Container ohne Schlafbefehl auszuführen, da es fest codiert ist. Wie kann ich feststellen, ob der Container erfolgreich beendet wurde? Kannst du mir bei der Lösung helfen?

Antwort

0

Ich würde es vorziehen, etwas wie Docker-Compose dafür zu verwenden. Aber Sie können immer noch mit Ihrem Code verwalten. Der Schlüssel ist, um den Behälter nicht zu starten, aber es zuerst erstellen und dann starten

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 

Auch die --link ist veraltet und sollte nicht verwendet werden. Sie sollten docker network create verwenden, um ein Netzwerk zu erstellen, und dieses Netzwerk dann Ihren Containern unter Verwendung von --net zuweisen. docker-compose macht viele dieser Dinge automatisch für Sie und deshalb ist es sinnvoller, stattdessen

zu verwenden