使用mySQL为我的Web应用程序构建自动构建时遇到了一些问题。
我将使用https://github.com/ehazlett/docker-sample-java-mysql-tomcat中的示例。
这是我的fig.yml
文件:
db:
image: orchardup/mysql
environment:
MYSQL_USER: java
MYSQL_PASSWORD: java
MYSQL_DATABASE: javatest
ports:
- "3306"
dbinit:
image: orchardup/mysql
entrypoint: /bin/bash
volumes:
- .:/host
command: -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"
links:
- db:mysql
app:
build: .
links:
- dbinit
- db:mysql
ports:
- "8080"
这就是简单的Dockerfile
:
FROM ehazlett/tomcat7
COPY dbtest /opt/tomcat/webapps/dbtest
现在,为了手动运行它,我应该运行这些命令:
docker run -d -P -e MYSQL_USER=java -e MYSQL_PASSWORD=java -e MYSQL_DATABASE=javatest --name mysql orchardup/mysql
docker run -ti --rm --link mysql:mysql -v $(pwd):/host --entrypoint /bin/bash orchardup/mysql -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"
docker build -t javatest .
docker run -ti -P --rm --link mysql:mysql javatest
我希望applciation只需键入:
即可运行docker-compose up
有没有办法做到这一点? 谢谢你的帮助。
答案 0 :(得分:1)
有关运行泊坞窗容器的订购,您需要设置depends_on。
对于你的情况:
version: '2'
services:
db:
image: orchardup/mysql
environment:
MYSQL_USER: java
MYSQL_PASSWORD: java
MYSQL_DATABASE: javatest
ports:
- "3306"
dbinit:
image: orchardup/mysql
depends_on:
- db
entrypoint: /bin/bash
volumes:
- .:/host
command: -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"
links:
- db:mysql
javatest:
build: .
image: javatest
depends_on:
- dbinit
links:
- dbinit
- db:mysql
ports:
- "8080"
使用javatest
的特定版本和运行docker compose up ,并使用-d
以分离模式运行(可选):
docker-compose up --build -d javatest
请记住,容器不会等待&#34;启动容器&#34; 的db
启动。
在这种情况下,您需要修改入口点并创建将等待连接的其他脚本 - 例如,检查打开的端口。 - 检查wait-for docker suggestion
编辑后:
我已添加完整示例docker-compose
的样子。我为version
文件添加了services
和yaml
以及正确的格式。
回到你想做的事情:
(1) docker run -d -P -e MYSQL_USER=java -e MYSQL_PASSWORD=java -e MYSQL_DATABASE=javatest --name mysql orchardup/mysql
(2) docker run -ti --rm --link mysql:mysql -v $(pwd):/host --entrypoint /bin/bash orchardup/mysql -c "sleep 4; mysql -u java --password=java -h mysql javatest < /host/init.sql; exit 0"
(3) docker build -t javatest .
(4) docker run -ti -P --rm --link mysql:mysql javatest
<强> 说明: 强>
在docker-compose
,db
正在执行步骤(1)
,dbinit
正在执行步骤(2)
,并依赖于db
和服务{ {1}}正在执行javatest
和(3)
步骤,因为您构建了(4)
图像,并使用步骤javatest
中的链接运行它,并且还依赖服务(4)
在javatest
上,所以它将等到容器启动(带有图像dbinit
)。