Docker容器运行asynchronous

我需要在我的应用程序中开发docker,我用maven-docker-plugin创builddocker图像。 之后,我运行sh脚本白衣在这里。

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容器抛出错误:

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

如果我用命令运行这个脚本

 sleep 120 

在它正常设置的容器之间,据我所知,nginx容器在应用程序容器完成之前运行。 有没有办法运行容器没有睡眠命令,因为它是硬编码。 我怎样才能确定容器成功完成。 你能帮我解决吗?

我宁愿使用像docker-compose这样的东西。 但是你仍然可以用你的代码来pipe理。 关键不是启动容器,而是先创build容器,然后启动它

 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来创build一个networking,然后使用--net将该networking分配给您的容器。 docker-compose自动为你做了很多这些事情,这就是为什么使用它更有意义