Docker
docker 上的 Couchbase 和 sync_gateway
我正在嘗試在 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 }
然後使用者名必須與儲存桶名稱相同。現在它起作用了。