跨容器传递容器 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 之间存在动态关联。
我是 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 之间存在动态关联。