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

Pass container IP across containers for config file

我是 Docker 的新手,我正在尝试创建两个容器,一个用于 MySQL,一个用于我的 Node.js 应用程序,基于来自 Docker 的图像]的中心。

我想将我的节点应用程序连接到 MySQL 主机。

为此,我打算存储有关此主机的信息 through environment variables in my config.yaml (used by 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"

Docker文件:

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

当您使用 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 和 MySQL 容器 docker 分配的动态 ip 之间存在动态关联。