在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.1
,0.0.0.0
,localhost
,但都没有成功。 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
答案 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-sample
,beer-sample
和travel-sample
的组合。 --data-ascii
选项使curl
不会阻塞动态创建的JSON。
现在,如果只有一种简单的方法可以在前台启动服务器。 :)