【问题标题】:Linking container with docker-compose使用 docker-compose 链接容器
【发布时间】:2015-06-30 15:47:48
【问题描述】:

我尝试运行一个带有 2 个容器的实例,1 个带有 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 boot2docker dockerfile docker-compose


    【解决方案1】:

    docker-compose v1 无法保证mysql进程在启动节点容器前完全启动并初始化。因此,您的节点容器负责测试 mysql 是否可用并等待/重试直到可用。

    您可以在应用程序中使用节点执行此操作(pooling-connections 可能是这样);或者提供一个boostrap shell脚本来测试mysql连接,一旦可用就会启动节点。

    【讨论】:

    • 我认为我的问题不是代码,而是 docker-compose 的链接。我无法连接“mysql”主机,因为容器主机不可访问?另外,我尝试更改代码,但不起作用:/
    • 这不就是depends_on的目的还是compose v1的链接语法?docs.docker.com/compose/compose-file/compose-file-v1/#links就是根据那个来判断容器的启动
    • 在 compose v1 中,link 指令提示 docker-compose 关于容器的启动顺序,但不会确保服务已准备好在启动下一个容器之前为容器中的请求提供服务。在 compose v2 中,引入了 depends_on 语法,并且对于起始顺序,其工作方式与 link 相同。从 compose v2.1 开始,您可以在启动依赖容器之前确保服务已准备好;为此,您必须结合使用 depends_onhealthcheck
    【解决方案2】:

    image: mysql之后的mysql部分中添加container_name: mysql行。

    可以添加以下 Bash 代码以确保 3306 端口已打开:

    while ! ( exec 2>/dev/null ; echo > /dev/tcp/mysql/3306 ) ; do sleep 1 ; done

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 2017-09-02
      • 2023-03-09
      • 2015-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多