链接容器与docker组成
我尝试运行一个实例与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
服务器的 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进程已完全启动并初始化。 因此,您的节点容器负责testingmysql是否可用,以及等待/重试,直到可用。
您可以在应用程序中使用节点来执行此操作( 池连接可能就是这种方式); 或提供一个testingmysql连接的boostrap shell脚本,一旦可用,将启动节点。
在image: mysql
后面的mysql部分添加一行container_name: mysql
image: mysql
。
可以添加以下Bash代码以确保3306端口已打开:
while ! ( exec 2>/dev/null ; echo > /dev/tcp/mysql/3306 ) ; do sleep 1 ; done
- 没有检测到“客户机”中安装了“rsync”
- 无法创builddocker虚拟机
- docker-container中的inotifywait不会注册更改
- 如何通过SSH连接docker容器?
- boot2docker – 运行docker version命令时尝试连接时发生错误
- 为什么'fig build'返回:AttributeError:'WrappedSocket'对象没有属性'recvfrom'?
- 处理“HTTP请求超时。 退出“。为Docker构build一个大型的aspnet项目
- Docker中的共享文件夹。 用Windows。 不仅是“C / user /”path
- 在dockerfile中定义资源限制和使用卷?