mysql - Docker 容器异步运行

标签 mysql maven docker nginx

我需要在我的应用程序中开发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 容器在应用程序容器完成之前运行。有没有办法在没有 sleep 命令的情况下运行容器,因为它是硬编码的。我如何判断容器是否成功完成。你能帮我解决吗?

最佳答案

我更愿意使用像 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/

相关文章:

java - Maven 存储库中的 selenium-api-3.0.1.jar 缺少 Selenium WebDriver 3.0.1 Actions 类

docker - 在 docker alpine 镜像上启用 acl

mysql - mysql 中的 GROUP BY 查询返回多个重复行

java - 将带有依赖项的build.gradle添加到Eclipse中的项目Web

php - 如何通过 PHP 和 MySQL 使用简单的 HTML 表单创建 PHP 高级搜索?

android - allprojects 存储库设置和 Fabric 之间的冲突

docker compose 文件无效,不允许使用附加属性 tty

Python 在 Docker 容器中找不到文件

mysql - 如何测试与mysql服务器的连接?

php - 使用 php 和 mysql 从表单插入数据库表时收到错误