我正在使用wercker自动测试和部署API客户端,方法是将API服务器作为私有服务与redis和postgres服务(所有应用程序级别)一起运行,以进行客户端的集成测试。理论上,此设置允许我的客户端与api服务器交互,并且客户端和服务器都能够使用相同的postgres和redis服务。
我的私有服务依赖于数据库服务,因此需要在启动时将这些服务的主机和端口(公开的环境变量)作为环境变量注入其容器中。但是,我无法从它们声明的同一个服务块中访问这些公开的连接变量。
我在下面发布了一段wercker.yml:
- id: postgres
env:
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
POSTGRES_USER: $POSTGRES_USER
POSTGRES_DB: $POSTGRES_DB
- redis
# - spotify/cassandra
- name: realtime
id: quay.io/ndustrialio/realtime-api-service
username: $QUAY_USERNAME
password: $QUAY_PASSWORD
tag: latest
registry: https://quay.io
env:
CLIENT_ID: $CLIENT_ID
CLIENT_SECRET: $CLIENT_SECRET
POSTGRES_USER: $POSTGRES_USER
POSTGRES_PASSWORD: $POSTGRES_PASSWORD
POSTGRES_DB: $POSTGRES_DB
POSTGRES_HOST: $POSTGRES_PORT_5432_TCP_ADDR
NODE_ENV: wercker_test
REDIS_HOST: $REDIS_PORT_6379_TCP_ADDR
REDIS_PORT: 6379
REDIS_DB: 0
CASSANDRA_HOSTS: cassandra
实时服务容器中的环境变量$ REDIS_PORT_6379_TCP_ADDR和$ POSTGRES_PORT_5432_TCP_ADDR为空。如何在实时服务中访问这些变量?
答案 0 :(得分:0)
解决方案是依靠Service Container Networking
您的postgres服务的IP具有从其ID派生的主机名,因此您只需要替换POSTGRES_HOST: $POSTGRES_PORT_5432_TCP_ADDR
由POSTGRES_HOST: postgres