Демон Docker предоставляет API Remote REST. Этот API используется Клиентом для связи с движком. Этот API также может быть вызван другими инструментами, такими как curl или Chrome Postman REST Client .
Если вы создаете демоны Docker с помощью Docker Machine на OSX Mavericks, то заставить этот API работать немного сложнее. Этот блог расскажет, как включить Docker Remote API на машинах Docker, созданных в Mac OS X.
Подключение к безопасному порту Docker с помощью curl дает команду как:
1
2
3
4
|
$ curl https: // $HOST:2376 /images/json \ --cert ~/.docker /cert .pem \ --key ~/.docker /key .pem \ --cacert ~/.docker /ca .pem |
Пара проблем с этой командой:
- Эта команда даже не работает для Docker Machine, поскольку сертификаты для каждого компьютера хранятся в
.docker/machine/machines/<machine-name>
. - Даже если эта команда изменена, чтобы соответствовать этому пути:
1
curl https:
//192
.168.99.100:2376
/images/json
--cert $DOCKER_CERT_PATH
/cert
.pem --key $DOCKER_CERT_PATH
/key
.pem --cacert $DOCKER_CERT_PATH
/ca
.pem
Это все еще дает следующую ошибку:
1curl: (58) SSL: Can't load the certificate
"/Users/arungupta/.docker/machine/machines/couchbase/cert.pem"
and its private key: OSStatus -25299
Виновником этого является обновленная утилита curl для пользователей OSX Mavericks . Таким образом, в новой версии CURL вместо API OpenSSL используется API безопасного транспорта Apple. Это означает, что сертификаты должны быть в формате P12.
Давайте исправим это!
- Перейдите в каталог, где хранятся сертификаты для вашего компьютера. В моем случае это
.docker/machine/machines/couchbase
. - Сгенерируйте
*.p12
формат для сертификата:12345678openssl pkcs12 -
export
\
-inkey key.pem \
-
in
cert.pem \
-CAfile ca.pem \
-chain \
-name client-side \
-out cert.p12 \
-password pass:mypass
Подробнее здесь .
- Теперь вызовите API REST как:
1
curl https:
//192
.168.99.100:2376
/images/json
--cert $DOCKER_CERT_PATH
/cert
.p12 --pass mypass --key $DOCKER_CERT_PATH
/key
.pem --cacert $DOCKER_CERT_PATH
/ca
.pem
Обратите внимание,
--cert
теперь указывает на сгенерированный сертификат--pass
а пароль сертификата указывается sing--pass
.Это вернет результат как:
1[{
"Id"
:
"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a"
,
"ParentId"
:
""
,
"RepoTags"
:[
"arungupta/couchbase:latest"
],
"RepoDigests"
:null,
"Created"
:1450330075,
"Size"
:374824677,
"VirtualSize"
:374824677,
"Labels"
:{}}]
Хорошо, теперь это имеет смысл!
- Попробуем запустить сервер Couchbase как:
12
~ > docker run -d -p 8091-8093:8091-8093 -p 11210:11210 arungupta
/couchbase
42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e
И вызовите другой API REST для просмотра более подробной информации об этом контейнере:
12~ > curl https:
//192
.168.99.100:2376
/containers/json
--cert $DOCKER_CERT_PATH
/cert2
.p12 --pass mypass --key $DOCKER_CERT_PATH
/key
.pem --cacert $DOCKER_CERT_PATH
/ca
.pem
[{
"Id"
:
"42d1414883affd0fbb272cb1378c2f6b5118acf3ed5cb60cbecdc42f95602e3e"
,
"Names"
:[
"/admiring_pike"
],
"Image"
:
"arungupta/couchbase"
,
"ImageID"
:
"sha256:d38beda529d3274636d6cb1c9000afe4f00fbdcfa544140d6cc0f5d7f5b8434a"
,
"Command"
:
"/entrypoint.sh /opt/couchbase/configure-cluster.sh"
,
"Created"
:1454850194,
"Ports"
:[{
"IP"
:
"0.0.0.0"
,
"PrivatePort"
:8092,
"PublicPort"
:8092,
"Type"
:
"tcp"
},{
"PrivatePort"
:11207,
"Type"
:
"tcp"
},{
"IP"
:
"0.0.0.0"
,
"PrivatePort"
:11210,
"PublicPort"
:11210,
"Type"
:
"tcp"
},{
"PrivatePort"
:18092,
"Type"
:
"tcp"
},{
"PrivatePort"
:18091,
"Type"
:
"tcp"
},{
"IP"
:
"0.0.0.0"
,
"PrivatePort"
:8093,
"PublicPort"
:8093,
"Type"
:
"tcp"
},{
"IP"
:
"0.0.0.0"
,
"PrivatePort"
:8091,
"PublicPort"
:8091,
"Type"
:
"tcp"
},{
"PrivatePort"
:11211,
"Type"
:
"tcp"
}],
"Labels"
:{},
"Status"
:
"Up 2 seconds"
,
"HostConfig"
:{
"NetworkMode"
:
"default"
},
"NetworkSettings"
:{
"Networks"
:{
"bridge"
:{
"IPAMConfig"
:null,
"Links"
:null,
"Aliases"
:null,
"NetworkID"
:
""
,
"EndpointID"
:
"6feaf4c1c70feaf0ba240ce55fb58ce83ebb84c8098bef9171998e84f607fa0b"
,
"Gateway"
:
"172.17.0.1"
,
"IPAddress"
:
"172.17.0.2"
,
"IPPrefixLen"
:16,
"IPv6Gateway"
:
""
,
"GlobalIPv6Address"
:
""
,
"GlobalIPv6PrefixLen"
:0,
"MacAddress"
:
"02:42:ac:11:00:02"
}}}}]
Прочитайте полный API и сходите с ума сейчас!
Ссылка: | Включите Docker Remote API на Docker Machine в Mac OS X от нашего партнера по JCG Аруна Гупта в блоге Miles to go 2.0… . |