簡體   English   中英

將容器與docker-compose鏈接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM