Docker Couchbase:无法使用入口点脚本中的 curl 连接到端口 8091

Docker Couchbase: Cannot connect to port 8091 using curl from within entrypoint script

运行 docker-machine 版本 0.5.0,Docker 版本 1.9.0 on OS X 10.11.1.

我有一个 Couchbase image of my own (not the official one). From inside the entrypoint script,我正在 运行 宁一些 curl 命令来配置 Couchbase 服务器和加载示例数据。问题是,curl 失败并显示错误消息 Failed to connect to localhost port 8091: Connection refused。 我尝试了 127.0.0.10.0.0.0localhost,但都没有成功。 netstat 显示 localhost 上的端口 8091 正在侦听。如果我稍后使用 docker exec 和 运行 相同的 curl 命令登录到服务器,那些工作!我错过了什么?

错误:

couchbase4 |   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
couchbase4 |                                  Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (7) Failed to connect to localhost port 8091: Connection refused

netstat 输出:

root@cd4d3eb00666:/opt/couchbase/var/lib# netstat -lntu                              
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:21100           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:21101           0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:9998          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8091            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:8092            0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:41125           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:11209           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:11210           0.0.0.0:*               LISTEN     
tcp6       0      0 :::11209                :::*                    LISTEN     
tcp6       0      0 :::11210                :::*                    LISTEN

这是我的 Dockerfile:

FROM couchbase

COPY configure-cluster.sh /opt/couchbase

CMD ["/opt/couchbase/configure-cluster.sh"]

configure-cluster.sh

/entrypoint.sh couchbase-server &

sleep 10

curl -v -X POST http://127.0.0.1:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300
curl -v http://127.0.0.1:8091/node/controller/setupServices -d services=kv%2Cn1ql%2Cindex
curl -v http://127.0.0.1:8091/settings/web -d port=8091 -d username=Administrator -d password=password
curl -v -u Administrator:password -X POST http://127.0.0.1:8091/sampleBuckets/install -d '["travel-sample"]'

这配置了 Couchbase 服务器,但仍在调试如何将 Couchbase 重新置于前台。

完整详情位于:https://github.com/arun-gupta/docker-images/tree/master/couchbase

事实证明,如果我在重新启动服务器后执行 curls,那些工作。去搞清楚!也就是说,请注意,据我所知,用于安装示例存储桶的 REST API 没有记录。 arun-gupta 的博客和他在这里的回答是我唯一提到过用于安装示例存储桶的 REST 调用的地方。有 python script 可用,但需要安装 python-httplib2.

也就是说,arun-gupta 的最后一个 curl 语句可以改进如下:

if [ -n "$SAMPLE_BUCKETS" ]; then
    IFS=',' read -ra BUCKETS <<< "$SAMPLE_BUCKETS"

    for bucket in "${BUCKETS[@]}"; do
        printf "\n[INFO] Installing %s.\n" "$bucket"
        curl -sSL -w "%{http_code} %{url_effective}\n" -u $CB_USERNAME:$CB_PASSWORD --data-ascii '["'"$bucket"'"]' $ENDPOINT/sampleBuckets/install
    done
fi

其中 SAMPLE_BUCKETS 可以是逗号分隔的环境变量,可能的值是 gamesim-samplebeer-sampletravel-sample 的组合。 --data-ascii 选项防止 curl 在动态创建的 JSON.

上阻塞

现在要是有一种在前台启动服务器的简单方法就好了。 :)