Wercker 服务未链接到主容器
Wercker Services Not Being Linked to Main Container
我在使用 Wercker 时遇到的问题是我的 wercker.yml 中的特定 linked services 没有链接到我的主要 docker容器。
当我的节点应用程序在成功 Wercker 部署后不在端口 3001 上 运行 时,我注意到了这个问题,如下图所示。
因此,我通过 SSH 进入我的服务器并进入我的 docker 容器,该容器在 Wercker 部署后使用:
运行
docker exec -i -t <my-container-name> ./bin/bash
并在我的 PM2 日志中发现以下 MongoDB 错误:
[MongoError: connect EHOSTUNREACH 172.17.0.7:27017
奇怪的是,从下面的图片中你可以看到我需要的每个服务的环境变量都已经设置好了:
有谁知道为什么即使设置了环境变量也无法从我的主容器访问服务容器?
下面是我正在使用的wercker.yml文件。
box: node
services:
- id: mongo
- id: redis
build:
steps:
- npm-install
deploy:
steps:
- npm-install
- script:
name: install pm2
code: npm install pm2 -g
- internal/docker-push:
username: $DOCKER_USERNAME
password: $DOCKER_PASSWORD
repository: /
ports: "3001"
cmd: /bin/bash -c "cd /pipeline/source && pm2 start processes_prod.json --no-daemon"
env: "MONGO_PORT_27017_TCP_ADDR"=$MONGO_PORT_27017_TCP_ADDR,"REDIS_PORT_6379_TCP_ADDR"=$REDIS_PORT_6379_TCP_ADDR
- add-ssh-key:
keyname: DIGITAL_OCEAN_KEY
- add-to-known_hosts:
hostname:
- script:
name: pull latest image
code: ssh root@ docker pull /:latest
- script:
name: stop running container
code: ssh root@ docker stop || echo ‘failed to stop running container’
- script:
name: remove stopped container
code: ssh root@ docker rm || echo ‘failed to remove stopped container’
- script:
name: remove image behind stopped container
code: ssh root@ docker rmi /:current || echo ‘failed to remove image behind stopped container’
- script:
name: tag newly pulled image
code: ssh root@ docker tag /:latest /:current
- script:
name: run new container
code: ssh root@ docker run -d -p 8080:3001 --name /:current
- script:
name: env
code: env
据我所知,Wercker 服务仅在构建过程中可用,在部署过程中不可用。 Mongo 和 Redis 是持久数据存储 - 这意味着它们不应该在您每次部署时都重新安装。
因此,请确保在部署环境中手动设置 Redis 和 Mongo。
我在使用 Wercker 时遇到的问题是我的 wercker.yml 中的特定 linked services 没有链接到我的主要 docker容器。
当我的节点应用程序在成功 Wercker 部署后不在端口 3001 上 运行 时,我注意到了这个问题,如下图所示。
因此,我通过 SSH 进入我的服务器并进入我的 docker 容器,该容器在 Wercker 部署后使用:
运行docker exec -i -t <my-container-name> ./bin/bash
并在我的 PM2 日志中发现以下 MongoDB 错误:
[MongoError: connect EHOSTUNREACH 172.17.0.7:27017
奇怪的是,从下面的图片中你可以看到我需要的每个服务的环境变量都已经设置好了:
有谁知道为什么即使设置了环境变量也无法从我的主容器访问服务容器?
下面是我正在使用的wercker.yml文件。
box: node
services:
- id: mongo
- id: redis
build:
steps:
- npm-install
deploy:
steps:
- npm-install
- script:
name: install pm2
code: npm install pm2 -g
- internal/docker-push:
username: $DOCKER_USERNAME
password: $DOCKER_PASSWORD
repository: /
ports: "3001"
cmd: /bin/bash -c "cd /pipeline/source && pm2 start processes_prod.json --no-daemon"
env: "MONGO_PORT_27017_TCP_ADDR"=$MONGO_PORT_27017_TCP_ADDR,"REDIS_PORT_6379_TCP_ADDR"=$REDIS_PORT_6379_TCP_ADDR
- add-ssh-key:
keyname: DIGITAL_OCEAN_KEY
- add-to-known_hosts:
hostname:
- script:
name: pull latest image
code: ssh root@ docker pull /:latest
- script:
name: stop running container
code: ssh root@ docker stop || echo ‘failed to stop running container’
- script:
name: remove stopped container
code: ssh root@ docker rm || echo ‘failed to remove stopped container’
- script:
name: remove image behind stopped container
code: ssh root@ docker rmi /:current || echo ‘failed to remove image behind stopped container’
- script:
name: tag newly pulled image
code: ssh root@ docker tag /:latest /:current
- script:
name: run new container
code: ssh root@ docker run -d -p 8080:3001 --name /:current
- script:
name: env
code: env
据我所知,Wercker 服务仅在构建过程中可用,在部署过程中不可用。 Mongo 和 Redis 是持久数据存储 - 这意味着它们不应该在您每次部署时都重新安装。
因此,请确保在部署环境中手动设置 Redis 和 Mongo。