我是Docker的新手,我正在尝试根据来自Docker的HUB的图像创建两个容器,一个用于MySQL,另一个用于我的Node.js应用程序。
我想将我的节点应用程序连接到MySQL主机。
为此,我计划在config.yaml中存储有关此主机through environment variables的信息(由node-config使用)以供日后使用。
我的问题是:如何将MySQL容器的IP地址传递给我的node.js应用程序?
它是动态归因的,我隐约知道我可以使用docker inspect $(docker ps -q) | grep '"IPAddress"'
命令检索它,它可能是一个线索?
mysql:
image: mysql:5.6
environment:
- MYSQL_ROOT_PASSWORD=****
- MYSQL_DATABASE=database
- MYSQL_USER=user
- MYSQL_PASSWORD=****
volumes:
- /data/mysql:/var/lib/mysql
nodeapp:
build: .
environment:
- MYSQL_USER=^^^^^ // will mirror the value up there, and so on
- ...
ports:
- "80:3000"
links:
- mysql
app:
port: 3000
db:
host: "MYSQL_HOST" // How can this be dynamic ?
port:"MYSQL_PORT"
database: "MYSQL_DATABASE"
user: "MYSQL_USER"
password: "MYSQL_PASSWORD"
FROM node:0.10
ADD package.json /usr/src/package.json
# Install app dependencies
RUN cd /usr/src && npm install
ADD . /usr/src
WORKDIR /usr/src
EXPOSE 3000
CMD npm start
答案 0 :(得分:2)
使用docker-compose运行容器时,它会在/etc/hosts
的每个容器中添加一个格式为
<dynamic ip> container_name
因此,当您运行docker-compose up
时,每个容器都会通过其名称知道任何其他容器。
所以,在你的confing.yaml中你必须改变这一行
host: "MYSQL_HOST" // How can this be dynamic ?
与
host: mysql
因为在/etc/hosts
中,您拥有主机名mysql
与docker分配的动态IP之间的动态关联。