我需要在我的应用程序中开发docker,我使用maven-docker-plugin创建docker映像。之后,我运行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的东西。但是您仍然可以使用代码进行管理。关键不是启动容器,而是先创建然后再启动它

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自动为您执行许多此类操作,这就是为什么更合理地使用它的原因

关于mysql - Docker容器异步运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45486727/

10-15 20:11
查看更多