在容器中传递容器IP以获取配置文件

时间:2015-10-27 17:56:09

标签: node.js docker docker-compose

我是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"'命令检索它,它可能是一个线索?

Docker-compose.yml:

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

Config.yaml:

app:

  port: 3000

  db:
    host: "MYSQL_HOST" // How can this be dynamic ?
    port:"MYSQL_PORT"
    database: "MYSQL_DATABASE"
    user: "MYSQL_USER"
    password: "MYSQL_PASSWORD"

Dockerfile:

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

1 个答案:

答案 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之间的动态关联。