首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构建另一个容器时填充Mysql码头容器?

如何在构建另一个容器时填充Mysql码头容器?
EN

Stack Overflow用户
提问于 2016-02-09 11:28:41
回答 1查看 2.4K关注 0票数 4

我正在尝试构建一个用于我的应用程序的自动构建容器和存储所有数据的mysql容器的docker文件。

在我的应用程序的dockerfile中,我有一个脚本,它设置应用程序运行所必需的所有数据库表和预设值。是否有可能将mysql容器的引用传递给myapplication,使其在构建myapplication时能够访问mysql容器?

如果是这样的话,我怎样才能做到,如果不是,那应该如何做呢?

docker-compose.yml

代码语言:javascript
复制
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

我的应用程序-dockerfile

代码语言:javascript
复制
FROM ubuntu:latest

EXPOSE 443

ENV applicationPath="/home/application“

COPY . ${applicationPath}

#Execute installationScript
RUN /bin/bash -c "./${applicationPath}/Tools/install_all.sh"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-09 22:14:08

在执行docker-compose build命令时,将只构建在docker-compose.yml文件中定义的每个服务的映像(在您的例子中是mysqlmyapplication),这意味着不会运行任何容器。

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

那我该怎么办?

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

docker-compose.yml

代码语言:javascript
复制
...
myapplication:
  command: bash -c "/home/myapplication/Tools/install_all.sh && /home/myapplication/startup.sh"
...

另外,请注意,您的myapplication容器必须安装了mysql客户端才能与mysql服务器进行通信。只需将下面的行添加到您的Dockerfile中,就可以安装它:

代码语言:javascript
复制
RUN apt-get update && apt-get install mysql-client -y

在您的install_all.sh script中,您可以像下面这样调用mysql (创建数据库):

代码语言:javascript
复制
#!/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;"
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35290901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档