Я пытаюсь создать сценарий, который создаст кучу образов докеров и отправит их в частный репозиторий.

Из документации команда docker build похоже, принимает URL-адреса git: действительно очень хорошо.

Все репозитории являются частными, и у всех в компании есть настройки ключей ssh ​​для доступа к репозиториям git через ssh, например git clone git@github.com:/my-org/my-repo.git

Я предположил, что предоставление такого URL-адреса будет работать, поскольку это очень распространенный вариант использования. Оказывается, нет.

Я искал решение в Google и нашел билет git о форматировании URL-адресов поэтому я попробовал все следующее:

  • ssh://git@github.com:/my-org/my-repo.git
  • ssh://git@github.com/my-org/my-repo.git
  • ssh://git@github.com:my-org/my-repo.git
  • git@github.com:/my-org/my-repo.git
  • git@github.com/my-org/my-repo.git
  • git@github.com:my-org/my-repo.git

Последний в этом списке самый многообещающий, так как я получаю следующий результат:

$ docker build -t registry.example.com:5000/my-repo:latest --ssh=default git@github.com:my-org/my-repo.git

[+] Building 0.9s (1/1) FINISHED                                                                                                                                                             
 => ERROR [internal] load git source git@github.com:my-org/my-repo.git                                                                                                     0.9s
------                                                                                                                                                                                       
 > [internal] load git source git@github.com:my-org/my-repo.git:                                                                                                                
#1 0.551 Warning: Permanently added the RSA host key for IP address '140.82.121.3' to the list of known hosts.
#1 0.896 git@github.com: Permission denied (publickey).
#1 0.898 fatal: Could not read from remote repository.
#1 0.898 
#1 0.898 Please make sure you have the correct access rights
#1 0.898 and the repository exists.
------
failed to solve with frontend dockerfile.v0: failed to read dockerfile: failed to load cache key: failed to fetch remote git@github.com:my-org/my-repo.git: exit status 128

Прежде чем кто-то спросит: да, репо существует, и я могу его клонировать :)

Я предполагал, что часть процесса «клонирование» будет выполняться «локально» с использованием моих собственных ключей ssh ​​перед отправкой контекста для сборки докера. Судя по всему, дело обстоит не так.

Поддерживается ли это функция, и если да, то как заставить ее работать?


РЕДАКТИРОВАТЬ: Я понял, что забыл дать некоторый контекст.

Я запускаю Docker Desktop на macOS big sur

Docker version 20.10.8, build 3967b7d

Client:
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
  compose: Docker Compose (Docker Inc., v2.0.0-rc.3)
  scan: Docker Scan (Docker Inc., v0.8.0)

Server:
 Containers: 9
  Running: 8
  Paused: 0
  Stopped: 1
 Images: 28
 Server Version: 20.10.8
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: e25210fe30a0a703442421b0f60afac609f950a3
 runc version: v1.0.1-0-g4144b63
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 5.10.47-linuxkit
 Operating System: Docker Desktop
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 3.842GiB
 Name: docker-desktop
 ID: 77LC:Z2AY:K6AA:OXAY:3JYQ:RSSL:RCJZ:GOSK:FUTG:DAPY:WIKK:BB7A
 Docker Root Dir: /var/lib/docker
 Debug Mode: true
  File Descriptors: 105
  Goroutines: 93
  System Time: 2021-09-16T08:47:27.924652162Z
  EventsListeners: 4
 HTTP Proxy: http.docker.internal:3128
 HTTPS Proxy: http.docker.internal:3128
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  <REDACTED>
 Live Restore Enabled: false
1
Nico J. 16 Сен 2021 в 11:44

2 ответа

Лучший ответ

Docker для Mac изначально работает не на вашем компьютере, а в VirtualMachine. Похоже, что команда git clone выполняется внутри VirtualMachine

Мое предположение основано на этой записи журнала: #1 0.551 Warning: Permanently added the RSA host key for IP address '140.82.121.3' to the list of known hosts.

Итак, чтобы иметь доступ к вашему частному репозиторию через ssh, вам также необходимо сохранить пару ключей ssh ​​в VirtualMachine Docker.

ИЗМЕНИТЬ Чтобы подключиться к VirtualMachine, откройте терминал и запустите docker run -it --privileged --pid=host justincormack/nsenter1

0
ddegasperi 16 Сен 2021 в 10:29

В моем случае я сгенерировал ssh-keygen внутри контейнера и скопировал его в свою учетную запись. Затем выполните exec в контейнере и протестируйте git clone my-ssh-url, и это сработало.

-1
hakik ayoub 16 Сен 2021 в 11:13