我正在尝试构建一个用于我的应用程序的自动构建容器和存储所有数据的mysql容器的docker文件。
在我的应用程序的dockerfile中,我有一个脚本,它设置应用程序运行所必需的所有数据库表和预设值。是否有可能将mysql容器的引用传递给myapplication,使其在构建myapplication时能够访问mysql容器?
如果是这样的话,我怎样才能做到,如果不是,那应该如何做呢?
docker-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我的应用程序-dockerfile
FROM ubuntu:latest
EXPOSE 443
ENV applicationPath="/home/application“
COPY . ${applicationPath}
#Execute installationScript
RUN /bin/bash -c "./${applicationPath}/Tools/install_all.sh"发布于 2016-02-09 22:14:08
在执行docker-compose build命令时,将只构建在docker-compose.yml文件中定义的每个服务的映像(在您的例子中是mysql和myapplication),这意味着不会运行任何容器。
一旦执行docker-compose run命令,将在以前构建的每个映像中运行一个容器,一个用于mysql,另一个用于myapplication。现在两个人都起来了,他们可以互相交流了。
那我该怎么办?
在运行容器时,在执行install_all.sh脚本之前,我将只执行startup.sh脚本(猜测它包含数据库设置)。请注意,mysql容器只有在启动时才能访问,这意味着只有在docker-compose up执行之后才能访问。
docker-compose.yml
...
myapplication:
command: bash -c "/home/myapplication/Tools/install_all.sh && /home/myapplication/startup.sh"
...另外,请注意,您的myapplication容器必须安装了mysql客户端才能与mysql服务器进行通信。只需将下面的行添加到您的Dockerfile中,就可以安装它:
RUN apt-get update && apt-get install mysql-client -y在您的install_all.sh script中,您可以像下面这样调用mysql (创建数据库):
#!/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;"https://stackoverflow.com/questions/35290901
复制相似问题