如何在另一个容器的生成期间填充一个Mysql docker容器?

我正在尝试构build一个docker-compose文件,该文件自动为我的应用程序和一个存储所有数据的mysql容器构build一个容器。

在我的应用程序的dockerfile中,我有一个脚本,用来设置应用程序运行所需的所有数据库表和预设值。 是否有可能以某种方式将mysql容器的引用传递给我的应用程序,在构buildmyapplication期间,它可以访问mysql容器?

如果是这样,我该怎么做,如果没有,那又该怎么办呢?

泊坞窗,compose.yml

mysql: image: mysql/mysql-server ports: - "3306:3306" environment: MYSQL_USER: root MYSQL_ROOT_PASSWORD: mysql-root-password myapplication: command: /home/myapplication/startup.sh build: ./.. dockerfile: ./dockerfiles/myapplication ports: - "443:443" - "8090:8090" links: - mysql:docker-mysql environment: MYSQL_SERVER: docker-mysql 

所有MyApplication-dockerfile

 FROM ubuntu:latest EXPOSE 443 ENV applicationPath="/home/application“ COPY . ${applicationPath} #Execute installationScript RUN /bin/bash -c "./${applicationPath}/Tools/install_all.sh" 

当执行docker-compose build命令时,docker只会build立在 docker-compose.yml文件中定义的每个服务的图像 (在你的情况下是mysqlmyapplication ),这意味着没有容器会被运行。

一旦你执行了docker-compose run命令,docker将运行一个前面构build的镜像的容器 ,一个用于mysql ,另一个用于myapplication 。 现在,两人都起来了,他们可以互相交stream。

所以我该怎么做?

我将只运行install_all.sh脚本(猜测它包含数据库设置),在运行容器时,执行startup.sh脚本之前。 请注意, mysql容器只有在启动时才可以访问,这意味着只有在docker-compose up

泊坞窗,compose.yml

 ... myapplication: command: bash -c "/home/myapplication/Tools/install_all.sh && /home/myapplication/startup.sh" ... 

此外,请注意,您的myapplication容器必须安装一个mysql-client才能够与mysql服务器通信。 只需将下面的代码添加到Dockerfile中即可安装它:

 RUN apt-get update && apt-get install mysql-client -y 

而在你的install_all.sh script ,你可以像下面那样创build一些mysql调用(创build一个数据库):

 #!/bin/bash mysql -h $DOCKER_MYSQL_PORT_3306_TCP_ADDR -P $DOCKER_MYSQL_PORT_3306_TCP_PORT -u $DOCKER_MYSQL_ENV_MYSQL_USER -p $DOCKER_MYSQL_ENV_MYSQL_ROOT_PASSWORD -e "CREATE DATABASE IF NOT EXISTS new_database;" 

如果您对此有任何疑问,请告知我,我会更新答案。