1

我正在使用 wercker 通过将 API 服务器作为私有服务与 redis 和 postgres 服务(所有应用程序级别)一起运行以对客户端进行集成测试,从而自动测试和部署 API 客户端。这种设置理论上允许我的客户端与 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 在实时服务容器中为空。如何在我的实时服务中访问这些变量?

4

1 回答 1

0

解决方案是依赖Service Container Networking

您的 postgres 服务的 IP 具有从其 id 派生的主机名,因此您只需替换POSTGRES_HOST: $POSTGRES_PORT_5432_TCP_ADDRPOSTGRES_HOST: postgres

于 2020-07-29T08:55:16.403 回答