docker-compose не может разрешить URI Git из TFS (Team Foundation Server) - PullRequest
0 голосов
/ 04 января 2019

TL; DR

Есть ли способ заставить docker-compose работать с URI TFS Git?


Я написал простой docker-compose.yml, который извлекает из репозитория, содержащего dockerfile, и создает образ.

version: '3.4'

services:
  ubuntu:    
    image: ubuntu-fromrepo
    build:       
      context: https://github.com/dockerfile/ubuntu.git
      dockerfile: Dockerfile

Когда вы запускаете это с:

docker-compose up --build

он автоматически извлечет репозиторий git (основная ветка), соберет образ ubuntu и запустит его.

У меня есть репозиторий в TFS с докер-файлом, который работает, когда вы извлекаете его вручную и запускаете. Итак, git clone ... для клонирования репо, docker build . для построения образа и затем docker run -it ubuntu:14.04 (например, с таким же репо, как указано выше в TFS).

Однако метод docker-compose, который я использовал выше, не работает, так как не удается разрешить URI Git для TFS. Ожидается, что HTTPS Git URI («https://server -name / имя репозитория .git»), но в TFS URI Git имеют формат («https://server -name »). /tfs/Default/project-name/_git/repository-name").

docker-compose не может разрешить этот URI и выдает эту ошибку:

Не удалось создать службу '...': {'message': 'ошибка загрузки удаленного контекста http: //.../ tfs / Default /.../_ git / ... : не удалось получить http: //.../ tfs / Default /.../_ git / ... со статусом 401 Не авторизовано: \ r \ n ...

HTML - это просто страница ошибки со следующим кодом ошибки:

Полный HTML здесь .

TF400813: Ресурс недоступен для анонимного доступа. Требуется аутентификация клиента.

Есть ли способ заставить docker-compose работать с URI TFS Git?


UPDATE:

Я проверил его с помощью токенизированного URI:

git clone https://token@servername/tfs/Default/projectname/_git/repositoryname

, который работает, но использование того же URI в файле docker-compose.yml не дает - выдает эту ошибку:

ERROR: compose.cli.errors.log_api_error: error detecting content type for remote http://...@.../tfs/Default/.../_git/...: unsupported Content-Type "text/html; charset=utf-8"`

Я думаю, что это просто возвращает страницу с ошибкой в ​​TFS для недоступного ресурса?

1 Ответ

0 голосов
/ 04 января 2019

В приведенном вами примере (с URL-адресом https://github.com/dockerfile/ubuntu.git) предполагается, что репозиторий Git общедоступен и не требует аутентификации. Ваш URL TFS, с другой стороны, требует , что требует аутентификации.

Лучший способ сделать это - создать личный токен доступа . Это позволит вам как ограничить доступ к ресурсу, так и поддерживать упрощенные схемы аутентификации (например, HTTP Basic). Создайте личный токен доступа для «Code (read)» и запишите его.

Теперь вы можете указать токен личного доступа в URL, который вы используете для подключения:

https://username:personal_access_token@servername/tfs/Default/projectname/_git/repositoryname

Например:

https://ethomson:a3bwcvdie7figfhriij4krlfmznko7pgqmr7s7tbuwvdw7xiybza@tfs:8080/tfs/DefaultCollection/Test/_git/testrepo

Обратите внимание, что ваш личный токен доступа похож на пароль и должен быть защищен как таковой. Если вы не хотите хранить личный токен доступа непосредственно в docker-compose.yml, вы можете использовать переменную окружения:

services:
  ubuntu:    
    image: ubuntu-fromrepo
    build:       
      context: https://username:${PAT}@servername/tfs/Default/projectname/_git/repositoryname
      dockerfile: Dockerfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...