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

时间:2015-12-07 10:44:27

标签: docker couchbase boot2docker docker-machine

在OS X 10.11.1上运行docker-machine版本0.5.0,Docker版本1.9.0。

我有Couchbase image我自己的(不是官方的)。在entrypoint script内部,我正在运行一些curl命令来配置Couchbase服务器并加载示例数据。问题是,curl失败,错误消息为Failed to connect to localhost port 8091: Connection refused。 我尝试了127.0.0.10.0.0.0localhost,但都没有成功。 netstat显示8091上的端口localhost正在侦听。如果我稍后使用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

2 个答案:

答案 0 :(得分:1)

这是我的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

答案 1 :(得分:0)

事实证明,如果我在重新启动服务器后执行curl,则可以正常工作。去搞清楚!也就是说,请注意,据我所知,用于安装示例存储桶的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。

现在,如果只有一种简单的方法可以在前台启动服务器。 :)