Google Datastore无法在Docker内部连接

时间:2019-02-13 02:53:03

标签: node.js docker google-cloud-platform docker-compose google-cloud-datastore

我有一个运行Google Datastore模拟器的Docker Compose文件:

https://cloud.google.com/datastore/docs/tools/datastore-emulator

version: '3'
services:

  database:
    image: google/cloud-sdk
    command: gcloud beta emulators datastore start --host-port 0.0.0.0:8000 --project emulator --store-on-disk
    ports:
      - 8000:8000

  backend:
    build: ./backend
    command: npm run start:dev
    ports:
      - 8080:8080
    environment:
      DATASTORE_EMULATOR_HOST: backend:8000
      DATASTORE_PROJECT_ID: emulator
    volumes:
      - ./backend:/usr/src/app:rw
      - /usr/src/app/node_modules

我有一个NodeJS后端,它遵循NodeJS数据存储区示例:

https://github.com/GoogleCloudPlatform/nodejs-docs-samples/blob/master/appengine/datastore/app.js

const Datastore = require('@google-cloud/datastore');
const datastore = Datastore();
const query = datastore.createQuery('visit');
datastore.runQuery(query);

当我在本地运行脚本时,它可以正常工作:

npm start

但是,当我与Docker一起运行时,NodeJS示例将挂起,而没有显示任何错误消息:

docker-compose up

在两个示例中,我都可以通过访问以下内容来查看“确定”消息:

http://localhost:8000

所以我知道数据存储实例正在正确运行。但是,当我在以下位置找到端点时,它会挂起:

http://localhost:8080/items

为什么挂了?是否正在尝试连接到正在进行的项目?我想运行一个完全孤立的Docker容器而不连接到实时Google Cloud Project。

完整的项目源在这里:

https://github.com/kmturley/appengine-datastore-nest-angular

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,当您为后端指定环境变量时,您应该说仿真器地址是1/12 = 0.0833333333333333333333333333.....3 (1/12) x 12000 = 999.9999999999999999...999999996 而不是1m/12m = 0.0833333333333333333333333333 (1m/12m) * 12000 = 999.9999999999999999999999996

1d/12d = 0.083333333333333329 // looses precision
(1d/12d) * 12000 = 1000 // rounded

除此之外,配置似乎还不错。让我知道是否有帮助