[英]Linking container with docker-compose
我試着用2個容器運行一個實例,一個帶有mysql的容器,另一個帶節點的實例。
在docker-compose.yml文件中:
api:
build: ./server
ports:
- 8001:8001
links:
- mysql:mysql
mysql:
image: mysql
environment:
MYSQL_DATABASE: ghostDB
MYSQL_ROOT_PASSWORD: root
volumes:
- /data/mysql:/var/lib/mysql
server /的 Dockerfile:
FROM node:0.12
ENV PORT 8001
ENV MYSQL_DATABASE ghostDB
ENV MYSQL_USER root
ENV MYSQL_PASSWORD root
ENV MYSQL_HOST mysql
ENV MYSQL_PORT 3306
ENV API_DIR /usr/src/server-celerative
COPY . \${API_DIR}
WORKDIR \${API_DIR}
RUN npm install
RUN node index.js
index.js
var db = mysql.createConnection({
host: 'mysql',
port: '3306',
user: 'root',
password: 'root',
database: 'ghostDB'
});
但我有輸出:
Error: getaddrinfo ENOTFOUND mysql
at errnoException (dns.js:44:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:94:26)
--------------------
我不明白為什么不行。
有人幫忙嗎?
注意:我使用boot2docker。
docker-compose v1無法確保在啟動節點容器之前已完全啟動和初始化mysql進程。 結果,您的節點容器負責測試mysql是否仍然可用,並負責等待/重試直到可用。
您可以使用應用程序中的節點執行此操作( 池連接可能是方法); 或提供一個boostrap shell腳本,該腳本將測試mysql連接,並在可用時啟動節點。
在image: mysql
之后的mysql部分中添加一行container_name: mysql
image: mysql
。
可以添加以下Bash代碼以確保3306端口處於打開狀態:
while ! ( exec 2>/dev/null ; echo > /dev/tcp/mysql/3306 ) ; do sleep 1 ; done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.