Несанкционированная ошибка при сборке docker образа с помощью кливера с использованием собственного базового образа - PullRequest
0 голосов
/ 10 апреля 2020

Я должен создать docker изображение, начиная с базового образа без искажений, с некоторыми пользовательскими файлами. Я использую JIB с Maven в моем весеннем загрузочном проекте. Я работаю над Windows 7 с Docker toolbox. это шаг, который я делаю сейчас:

1) создать Dockerfile со следующими записями:

FROM gcr.io/distroless/java:8
COPY known_hosts  ~/.ssh/known_hosts
EXPOSE 8888

2) выполнить команду:

docker build -t conf_server_image .

3) добавлены следующие строки в пом. xml:

          <plugin>
              <groupId>com.google.cloud.tools</groupId>
              <artifactId>jib-maven-plugin</artifactId>
              <version>2.1.0</version>
              <configuration>
                <from>
                    <image>conf_server_image:latest</image>
                </from>
                <to>
                  <image>${project.artifactId}:${project.version}</image>
                </to>
                <container>
                    <jvmFlags>
                        <jvmFlag>-Xms512m</jvmFlag>
                        <jvmFlag>-Xmx512m</jvmFlag>
                    </jvmFlags>
                </container>
              </configuration>
            </plugin>

4) выполнить команду (с моим идентификатором ad pwd docker .io):

docker login

4) выполнить команду сборки

mvnw clean compile jib:dockerBuild

но процесс вернет мне эту ошибку:

[INFO] Executing tasks:
[INFO] [============                  ] 40,0% complete
[INFO] > building image to Docker daemon
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  12.941 s
[INFO] Finished at: 2020-04-10T11:26:59+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:2.1.0:dockerBuild (default-cli) on project sirio-configuration-server: Build to Docker daemon failed, pe
haps you should make sure your credentials for 'registry-1.docker.io/library/conf_server_image' are set up correctly. See https://github.com/GoogleContainerTools/jib/blob/mast
r/docs/faq.md#what-should-i-do-when-the-registry-responds-with-unauthorized for help: Unauthorized for registry-1.docker.io/library/conf_server_image: 401 Unauthorized
[ERROR] {"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"library/conf_server_image","Action":"pull"}]}]}
[ERROR] -> [Help 1]
[ERROR]

что я забыл? Спасибо

1 Ответ

1 голос
/ 10 апреля 2020

conf_server_image:latest в качестве эталона изображения указывает на Docker Концентратор (псевдоним для library/conf_server_image:latest). Например, в Dockerfile, когда вы говорите,

FROM openjdk:11-jre-slim

Docker CLI загружает openjdk изображение на Docker Hub.

$ docker pull openjdk:11-jre-slim
11-jre-slim: Pulling from library/openjdk
...

Обратите внимание на ссылку на изображение library/openjdk.

Чтобы Jib загрузил изображение в локальном Docker демоне, вы должны сказать <image>docker://conf_server_image:latest</image>. Однако использование изображения от Docker демона влечет за собой некоторые накладные расходы (которые могут быть незначительными). Таким образом, может быть лучше поместить sh базовый образ в любой реестр контейнера (локальный частный реестр тоже может работать) и использовать Jib-образ. Jib кэширует базовые изображения, поэтому использование изображения в реестре не означает, что Jib будет загружать его снова и снова. (Но, конечно, если изображение, на которое указывает тег, обновляется, Jib автоматически загружает обновленное изображение.)

Существует еще один вариант, в котором вы можете просто избавиться от первого шага Dockerfile. Jib позволяет добавлять любые произвольные файлы в изображение с помощью функции <extraDirectories>. Каталог по умолчанию - src/main/jib, поэтому, например, если вы поместите src/main/jib/foo/bar.txt, у вас будет /foo/bar.txt во встроенном образе. Однако я понимаю, что вы можете не захотеть помещать личный known_hosts в репозиторий. (Потенциально вы можете настроить специальный профиль Dev Maven, который, например, копирует known_hosts в src/main/jib, используя цель copy-resources из плагина Maven Resources.)

Вы также можете установить некоторый контейнер конфигурации, включая порты в Jib.

<configuration>
  <container>
    ...
    <ports>
      <port>8888</port>
    </ports>
  </container>
</configuration>

Наконец, потому что вы используете jib:dockerBuild, который, я думаю, docker login не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...