Я создаю прототип приложения Go, которое в конечном итоге будет взаимодействовать с удаленным Docker хостом. Для этого я использую Docker Go клиентский пакет (документы в https://godoc.org/github.com/docker/docker/client).
Среда - Ubuntu 19.10 в VirtualBox 6.1.4, использующая Docker 19.03.6 и Go 1.14. Все пакеты Go были установлены с go get за последние 72 часа. В целях локального тестирования я пытаюсь подключиться к локальному хосту Docker по tcp: //0.0.0.0: 2375. То есть я запускаю
sudo dockerd -H tcp://0.0.0.0:2375
При этом такие команды, как
docker -H tcp://0.0.0.0:2375 ps
и
curl -k -v -i http://0.0.0.0:2375/v1.40/containers/json
оба работают, и я могу наблюдать трафик c через порт 2375 с Wireshark.
Однако попытка сделать то же самое через клиентский пакет Go не удается с
Невозможно подключиться к демону Docker по tcp: //0.0.0.0: 2375. Работает ли демон docker?
, и в Wireshark ничего не появляется. Вот пример Go code:
package main
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/client"
)
func main() {
cli, err := client.NewClientWithOpts(client.WithHost("tcp://0.0.0.0:2375"), client.WithAPIVersionNegotiation())
if err != nil {
fmt.Println("error: could not create docker client handle")
fmt.Println(err)
}
options := types.ContainerListOptions{}
data, err := cli.ContainerList(context.Background(), options)
if err != nil {
fmt.Println("error: could not request containers list")
fmt.Println(err)
} else {
fmt.Println(data)
}
}
Попытки установить переменные среды DOCKER_HOST=tcp://0.0.0.0:2375
, DOCKER_CERT_PATH=
и DOCKER_TLS_VERIFY=
, затем настроить дескриптор клиента через client.FromEnv()
, также потерпели неудачу в точно так же.
Что я здесь не так делаю?