не может использовать пакеты в каталоге поставщика в хранилище докера - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь создать контейнер с go api докера.Я хочу выставить порт, используя container.Config.ExposedPorts в ContainerCreate() API.Ниже приведен код

package main

import (
        "fmt"
        "context"
        "github.com/docker/docker/api/types/container"
        "github.com/docker/docker/client"
        "github.com/docker/go-connections/nat"
)

func main() {

        ctx := context.Background()
        cli, err := client.NewClientWithOpts(client.WithVersion("1.38"))
        if err != nil {
                fmt.Println("Failed to get container envoronment", err)
        }   

        resp, err := cli.ContainerCreate(ctx, &container.Config{
                Image: "hyperledger/fabric-ca",
                Cmd:   []string{"/bin/sh", "-c", "fabric-ca-server start -b admin:adminpw"},
                Env: []string{"FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server",
                        "FABRIC_CA_SERVER_CA_NAME=ca.example.com"},
                ExposedPorts: nat.PortSet{"22/tcp":struct{}{},},
        }, nil, nil, "ca.example.com")


        if err != nil {
                fmt.Println(" failed to create container, err:", err)
        } else {
                fmt.Println(" Container ID :", resp.ID, "warning:", resp.Warnings, "err:", err)
        }   
}

, когда я компилирую, я получаю следующую ошибку

vignesh@vignesh-ThinkPad-E470 ~/go-book/src/github.com/my_fabric $ go build asd.go 
asd.go:8:9: cannot find package "github.com/docker/go-connections/nat" in any of:
    /home/vignesh/go-book/src/github.com/my_fabric/vendor/github.com/docker/go-connections/nat (vendor tree)
    /usr/local/go/src/github.com/docker/go-connections/nat (from $GOROOT)
    /home/vignesh/go-book/src/github.com/docker/go-connections/nat (from $GOPATH)

Поскольку пакет "github.com/docker/go-connections/nat" находится в каталоге поставщика в "github.com/docker/docker/vendor/github.com/docker/go-connections/nat", я создал поставщикакаталог в моем рабочем каталоге и скопировал содержимое github.com/docker/docker/vendor/github.com/docker/go-connections/nat в github.com/my_fabric/vendor/go-connections/nat и использовал "github.com/my_fabric/go-connections/nat" при импорте, а не "github.com/docker/go-connections/nat".Но я получил следующую ошибку:

vignesh@vignesh-ThinkPad-E470 ~/go-book/src/github.com/my_fabric $ go build asd.go 
# command-line-arguments
./asd.go:25:29: cannot use "github.com/my_fabric/vendor/github.com/my_fabric/go-connections/nat".PortSet literal (type "github.com/my_fabric/vendor/github.com/my_fabric/go-connections/nat".PortSet) as type "github.com/docker/docker/vendor/github.com/docker/go-connections/nat".PortSet in field value

В основном я хочу использовать пакеты, которые находятся в каталоге vendor в хранилище докера.Пожалуйста, помогите:)

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Эти два каталога не эквивалентны:

github.com/docker/docker/vendor/github.com/docker/go-connections/nat
github.com/my_fabric/vendor/go-connections/nat

Вы должны переместить (не скопировать) все зависимые компоненты Docker без изменений в ваш собственный каталог поставщиков, например, должен существовать следующий каталог:

github.com/my_fabric/vendor/github.com/docker/go-connections/nat

Обратите внимание на github.com/docker сегменты.Если вы скопируете каталогов, вы получите две копии пакетов, что приведет к неприятностям.Например, вы получаете различные типы

"github.com/docker/docker/vendor/github.com/docker/go-connections/nat".Port
"github.com/docker/go-connections/nat".Port

. Вам вовсе не нужно менять операторы импорта.

0 голосов
/ 20 февраля 2019

Это будет работать, просто попробуйте предоставить пользовательские разрешения для каталога вендора в среде докера.Путь продавца к импорту пакета указан правильно.

Импорт в golang работает следующим образом: - Сначала он импортирует пакет из каталога поставщика, если не будет искать каталог $GOPATH src для того же пакета.

Ошибка говорит, что не может найти пакет ни по одному из указанных путей.Но у вас это есть в каталоге vendor, так что это может быть любая проблема с разрешениями.

Поскольку это происходит, если вы работаете в linux, разрешения не позволят получить доступ к каталогу vendor.

ТакжеЛучше не копировать, а сгенерировать пакет поставщика, используя Gopkg.toml в докере.

...