在docker-compose中构建两个容器之一后,是否有一种方法可以运行命令

时间:2019-07-10 11:48:41

标签: docker docker-compose

以下情况:

我想用docker-compose两个容器来构建。一个是MySQL,另一个是使用springboot执行的.war文件,该文件依赖于MySQL并且需要一个有效的数据库。构建mysql容器后,我想在构建另一个容器之前用mysqldump文件填充数据库。

我的第一个想法是将它作为

放在我的MySQL Dockerfile中
    #RUN mysql -u root -p"$MYSQL_ROOT_PASSWORD"' < /appsb.sql

但是它当然想在构建时执行它。

我不知道如何在docker-compose文件中以Command的方式执行此操作,也许可行。还是我需要构建一个脚本?

docker-compose.yml

version: "3"  
services:  
  mysqldb:  
    networks:  
      - appsb-mysql  
    environment:  
      - MYSQL_ROOT_PASSWORD=rootpw  
      - MYSQL_DATABASE=appsb  
    build: ./mysql  


  app-sb:  
    image: openjdk:8-jdk-alpine  
    build: ./app-sb/  
    ports:  
      - "8080:8080"  
    networks:  
     - appsb-mysql  
    depends_on:  
    - mysqldb  

networks:
- appsb-mysql:

用于mysqldb的Dockerfile:

FROM mysql:5.7
COPY target/appsb.sql /
#RUN mysql -u root -p"$MYSQL_ROOT_PASSWORD"' < /appsb.sql

其他springboot应用程序的Dockerfileb

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/appsb.war /
RUN java -jar /appsb.war

1 个答案:

答案 0 :(得分:0)

这是MySQL容器Setting up MySQL and importing dump within Dockerfile的类似问题(在启动时加载dump.sql)。

选项1:通过Dockerfile中的命令导入。

选项2:执行程序。来自docker-compose.yml的bash脚本

选项3:执行程序。来自docker-compose.yml的导入命令