Docker

docker 上的 Couchbase 和 sync_gateway

  • April 19, 2017

我正在嘗試在 docker 容器中設置 Couchbase 和 sync_gateway,但是當 sync_gateway 嘗試連接數據庫時出現一些奇怪的身份驗證錯誤。

Couchbase 在其容器上執行正常,當我將 sync_gateway 設置為使用GUEST使用者時,它能夠連接到 couchbase。問題是,我真的想使用我創建的使用者名/密碼,然後我設置了 couchbase 容器。

我知道沙發底座正在工作,因為我可以從 Web 界面訪問它localhost:8091並使用我創建的使用者名/密碼登錄。但是當嘗試使用配置文件中的使用者名/密碼進行訪問時,sync_gateway 會引發我在下面發布的錯誤。

Dockerfile

FROM couchbase/server
ENTRYPOINT ["/code/scripts/entrypoint.sh", "couchbase-server"]

這是entrypoint.sh

#!/bin/bash

cb_cli() {
   ${CB_CLI} ${@} ${CREDENTIALS}
}

server_configured() {
   server_list=$(cb_cli server-list)
   return $([[ $? == 0 ]] && [[ $(echo ${server_list} | wc -l) != 0 ]])
}

setup_couchbase_server() {
  cb_cli cluster-init --cluster-ramsize=${RAM_SIZE} --cluster-username=admin --cluster-password=admin123
  cb_cli bucket-create --bucket-ramsize=${RAM_SIZE} --bucket=${BUCKET_NAME}
}

couchbase_config() {
   curl ${SERVER_ADDR} >&- 2>&-
   while [[ $? != 23 ]]; do
       sleep 3
       curl ${SERVER_ADDR}>&- 2>&-
   done

   ! server_configured && {
       echo "Setting up couchbase server..."
       setup_couchbase_server && echo "Setup complete"
   }
}

[[ "$1" == "couchbase-server" ]] && {
   /usr/sbin/runsvdir-start &
   couchbase_config
   echo "Starting Couchbase Server -- Web UI available at http://${SERVER_ADDR} and logs available in /opt/couchbase/var/lib/couchbase/logs"
   /usr/sbin/runsvdir-start
}

碼頭工人-compose.yml

version: '3'
services:
 couchbase_server:
   build: .
   ports:
     - "8091-8094:8091-8094"
     - "11210:11210"
   volumes:
     - .:/code
   environment:
     - CB_CLI=opt/couchbase/bin/couchbase-cli
     - SERVER_ADDR=localhost:8091
     - CREDENTIALS=-u admin -p admin123 -c localhost:8091
     - RAM_SIZE=1024
     - BUCKET_NAME=sync_gateway
 sync_gateway:
   image: couchbase/sync-gateway
   links:
     - "couchbase_server:db"
   depends_on:
     - couchbase_server
   volumes:
     - ./sync_gateway_config.json:/code
   command: /code
   ports:
     - 4984:4984
     - 4985:4985

sync_gateway_config.json

{
   "log": ["REST"],
   "interface": ":4984",
   "databases": {
       "sync_gateway": {
           "server": "http://db:8091",
           "username": "admin",
           "password": "admin123"
       }
   }
}

最後,這是我執行docker-compose up時遇到的錯誤:

couchbase_server_1  | Setting up couchbase server...
couchbase_server_1  | SUCCESS: init/edit localhost
couchbase_server_1  | SUCCESS: bucket-create
couchbase_server_1  | Setup complete
couchbase_server_1  | Starting Couchbase Server -- Web UI available at
http://localhost:8091 and logs available in /opt/couchbase/var/lib
/couchbase/logs

sync_gateway_1      | 2017-03-28T11:29:51.240Z Opening Couchbase 
database sync_gateway on <http://db:8091> as user "admin"

sync_gateway_1      | _time=2017-03-28T11:29:51.262+00:00 _level=INFO
_msg=Non-healthy node; node details:

sync_gateway_1      | _time=2017-03-28T11:29:51.262+00:00 _level=INFO 
_msg=Hostname=172.20.0.2:8091, Status=warmup, 
CouchAPIBase=http://172.20.0.2:8092
/sync_gateway%2B87e2e410d0e9da0295091c6de9ae5ae7, 
ThisNode=true

sync_gateway_1      | 2017-03-28T11:29:51.262Z WARNING: Error 
installing Couchbase design doc: no available couch rest URLs --
db.installViews.func1() at database.go:577

sync_gateway_1      | _time=2017-03-28T11:29:51.263+00:00 _level=INFO
_msg= Trying with 
http://172.20.0.2:8091/pools/default/bucketsStreaming/sync_gateway

sync_gateway_1      | _time=2017-03-28T11:29:51.268+00:00 _level=INFO
_msg=Non-healthy node; node details:

sync_gateway_1      | _time=2017-03-28T11:29:51.268+00:00 _level=INFO
_msg=Hostname=172.20.0.2:8091, Status=warmup, 
CouchAPIBase=http://172.20.0.2:8092
/sync_gateway%2B87e2e410d0e9da0295091c6de9ae5ae7, ThisNode=true

sync_gateway_1      | 2017-03-28T11:29:51.268Z WARNING: Error 
installing Couchbase design doc: no available couch rest URLs -- 
db.installViews.func1() at database.go:577

sync_gateway_1      | _time=2017-03-28T11:29:51.272+00:00 _level=INFO
_msg=Got new configuration for bucket sync_gateway

sync_gateway_1      | _time=2017-03-28T11:29:51.279+00:00 _level=INFO
_msg=Non-healthy node; node details:

sync_gateway_1      | _time=2017-03-28T11:29:51.280+00:00 _level=INFO 
_msg=Hostname=172.20.0.2:8091, Status=warmup, 
CouchAPIBase=
http://172.20.0.2:8092/sync_gateway%2B87e2e410d0e9da0295091c6de9ae5ae7,
ThisNode=true

sync_gateway_1      | 2017-03-28T11:29:51.280Z WARNING: Error
installing Couchbase design doc: no available couch rest URLs -- 
db.installViews.func1() at database.go:577

sync_gateway_1      | _time=2017-03-28T11:29:51.301+00:00 _level=INFO
_msg=Non-healthy node; node details:

sync_gateway_1      | _time=2017-03-28T11:29:51.301+00:00 _level=INFO
_msg=Hostname=172.20.0.2:8091, Status=warmup, 
CouchAPIBase=http://172.20.0.2:8092
/sync_gateway%2B87e2e410d0e9da0295091c6de9ae5ae7, ThisNode=true

sync_gateway_1      | 2017-03-28T11:29:51.301Z WARNING: Error
installing Couchbase design doc: no available couch rest URLs -- 
db.installViews.func1() at database.go:577

sync_gateway_1      | _time=2017-03-28T11:29:51.330+00:00 _level=INFO
_msg=Got new configuration for bucket sync_gateway

sync_gateway_1      | _time=2017-03-28T11:29:51.342+00:00 _level=INFO
_msg= Trying with selected node 0

sync_gateway_1      | _time=2017-03-28T11:29:51.399+00:00 _level=INFO 
_msg= Trying with selected node 0

sync_gateway_1      | 2017-03-28T11:29:51.576Z WARNING: Error from Incr
in sequence allocator (0) - attempt (1/3): MCResponse status=AUTH_ERROR,
opcode=SASL_AUTH, opaque=0, msg: 
Auth failure -- db.(*sequenceAllocator).incrWithRetry() at
sequence_allocator.go:88

sync_gateway_1      | 2017-03-28T11:29:51.589Z WARNING: Error from Incr 
in sequence allocator (0) - attempt (2/3): MCResponse status=AUTH_ERROR, 
opcode=SASL_AUTH, opaque=0, msg: 
Auth failure -- db.(*sequenceAllocator).incrWithRetry() at 
sequence_allocator.go:88

sync_gateway_1      | 2017-03-28T11:29:51.602Z WARNING: Error from Incr 
in sequence allocator (0) - attempt (3/3): MCResponse status=AUTH_ERROR,
opcode=SASL_AUTH, opaque=0, msg:
Auth failure -- db.(*sequenceAllocator).incrWithRetry() at 
sequence_allocator.go:88

sync_gateway_1      | 2017-03-28T11:29:51.613Z WARNING: Too many unsuccessful 
Incr attempts in sequence allocator - giving up (0): MCResponse status=
AUTH_ERROR, opcode=SASL_AUTH, opaque=0, msg: Auth failure -- 
db.(*sequenceAllocator).incrWithRetry()
at sequence_allocator.go:94

sync_gateway_1      | 2017-03-28T11:29:51.613Z WARNING: 
Error from Incr in _reserveSequences(0): Unable to increment sequence:
MCResponse status=AUTH_ERROR, opcode=SASL_AUTH, opaque=0, msg: Auth failure -- 
db.(*sequenceAllocator)._reserveSequences() at sequence_allocator.go:65

sync_gateway_1      | 2017-03-28T11:29:51.613Z FATAL: 
Error opening database: Unable to increment sequence: 
MCResponse status=AUTH_ERROR, opcode=SASL_AUTH, opaque=0, msg: Auth failure --
rest.RunServer() at config.go:677

這很棘手,但事實證明,配置文件中的使用者名和密碼指的是儲存桶而不是沙發基礎伺服器。答案是在創建儲存桶時包含密碼。我的setup_couchbase_server文件entrypoint.sh現在看起來像這樣:

setup_couchbase_server() {
  cb_cli cluster-init --cluster-ramsize=${CB_RAM_SIZE}
  cb_cli bucket-create --bucket-ramsize=${CB_RAM_SIZE} --bucket=${CB_SYNC_GATEWAY_BUCKET} --bucket-password=bucket_pass
}

然後使用者名必須與儲存桶名稱相同。現在它起作用了。

引用自:https://serverfault.com/questions/841009