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.1
、0.0.0.0
、localhost
,但都没有成功。 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
事实证明,如果我在重新启动服务器后执行 curl
s,那些工作。去搞清楚!也就是说,请注意,据我所知,用于安装示例存储桶的 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.
上阻塞
现在要是有一种在前台启动服务器的简单方法就好了。 :)
运行 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.1
、0.0.0.0
、localhost
,但都没有成功。 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
事实证明,如果我在重新启动服务器后执行 curl
s,那些工作。去搞清楚!也就是说,请注意,据我所知,用于安装示例存储桶的 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.
现在要是有一种在前台启动服务器的简单方法就好了。 :)