Вы можете выполнить эту команду, чтобы указать интерфейс командной строки вашего докера на minikube: eval $ (minikube docker-env), а затем вы можете создавать свои изображения там или экспортировать их из того места, где они у вас есть, и импортировать.

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

Я создаю образ и помечаю его, затем помещаю в локальный реестр, и он успешно выдвигается, и я могу также извлечь его из реестра, а также, когда я запускаю curl, чтобы получить список тегов, я получил результат, и вот что я сделал

1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
4- docker push 127.0.0.1:5000/eliza/console:0.0.1
5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list

Все вышеперечисленные шаги работают нормально, без проблем.

Моя проблема, когда я запускаю Minikube и пытаюсь получить доступ к этому изображению в локальном реестре внутри него

Поэтому, когда я запускаю следующие команды

1- sudo minikube start --insecure-registry 127.0.0.1:5000
2- eval $(minikube docker-env)
3- minikube ssh
4- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list

на последнем шаге (пункт 4) он дал мне следующее сообщение

curl: (7) Не удалось подключиться к 127.0.0.1 порту 5000: соединение отказано

Таким образом, я могу получить доступ к реестру образов с моей машины, но не из мини-куба, что, конечно же, создает проблемы при развертывании этого образа с помощью Kubernetes на мини-кубе и не позволяет выполнить развертывание из-за невозможности подключения кhttp://127.0.0.1:5000

Можете ли вы помочь мне настроить minikube, чтобы увидеть мой локальный реестр, чтобы моя проблема была решена, тогда я смогу успешно развернуть образ в minikube, используя kubernetes?

ОБНОВИТЬ

Я использую этот файл yaml (я назвал егоConsolePre.yaml) развернуть мой образ с помощью kubernetes

apiVersion: v1
  kind: Service
  metadata:
    name: tripbru-console
    labels:
      app: tripbru-console
  spec:
    ports:
      - port: 9080
        targetPort: 9080
        nodePort: 30181
    selector:
      app: tripbru-console
      tier: frontend
    type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tripbru-console
  labels:
    app: tripbru-console
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: tripbru-console
        tier: frontend
    spec:
      containers:
      - image: docker.local:5000/eliza/console:0.0.1
        name: tripbru-console
        ports:
        - containerPort: 9080
          name: tripbru-console

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

sudo kubectl apply -f /PATH_TO_YAML_FILE/ConsolePre.yaml

результат

NAME                                      READY     STATUS         RESTARTS   AGE
po/tripbru-console-1655054400-x3g87       0/1       ErrImagePull   0          1m

и когда я запускаю опишите команду

sudo kubectl описать pod tripbru-console-1655054400-x3g87

я нашел следующее сообщение в описании результата

Ошибка ответа от демона: {"message": "Gethttps: //docker.local: 5000 / v1 / _ping: dial tcp: lookup docker.local в 10.0.2.3:53: read udp 10.0.2.15:57792-\u003e10.0.2.3:53: тайм-аут ввода-вывода "}

и я настроилdocker.local xxx.xxx.xx.4 в миникубе / etc / hosts, так что я не знаю, откуда 10.0.2.3:53 и 10.0.2.15:57792.

Так как я могу решить эту проблему тоже.

Спасибо :)

 mibrahim.iti06 сент. 2017 г., 22:45
@TarunLalwani да, и я получил такой результат пинга [64 байта из 192.168.1.4: seq = 1 ttl = 63 время = 0,715 мс]
 Tarun Lalwani06 сент. 2017 г., 22:53
Создать файл/etc/docker/daemon.json с содержанием{"insecure-registries": ["docker.local:5000", "xxx.xxx.xx.4:5000"]}, Используйте IP также. После создания файла перезапустите Docker и снова протестируйте свою систему. Все это будет сделано внутри Minukube VM
 Tarun Lalwani07 сент. 2017 г., 07:54
Пожалуйста, проверьте изменения в моем ответе
 mibrahim.iti07 сент. 2017 г., 02:07
@TarunLalwani я создал /etc/docker/daemon.json внутри мини-куба и добавил {"insecure-registries": ["docker.local: 5000", "192.168.1.4:5000"]} к нему, но когда я пытаюсь перезапустить докер это не удалось, и я получил это >> level = fatal msg = "не удалось настроить демон Docker с файлом /etc/docker/daemon.json: следующие директивы указаны как в виде флага, так и в файле конфигурации: insecure-registries: (из флага: [10.0.0.0/24], из файла: [docker.local: 5000 192.168.1.4:5000])\n "
 Tarun Lalwani06 сент. 2017 г., 22:23
Можете ли вы пропинговать docker.local из инсайдерской виртуальной машины minikube?

Ответы на вопрос(3)

Решение Вопроса

127.0.0.1 где угодно. Это не верно.

Так что, если ваш компьютер IP 192.168.0.101. Тогда ниже работает

1- docker build -t 127.0.0.1:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 127.0.0.1:5000/eliza/console:0.0.1
4- docker push 127.0.0.1:5000/eliza/console:0.0.1
5- curl -X GET http://127.0.0.1:5000/v2/eliza/console/tags/list

Поскольку запуск Docker отображает реестр на 127.0.0.1:5000 и 192.168.0.101:5000. Теперь на твоей машине только эта127.0.0.1 будет работать. Теперь, когда вы используете

3- minikube ssh

Вы попадаете в машину minikube, и на ней нет реестра, работающего на 127.0.0.1:5000. Итак, ошибка. Реестр недоступен на этом компьютере с использованием IP-адреса компьютера.

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

Итак, на вашей машине создайте запись в/etc/hosts

docker.local 127.0.0.1

И измените свои команды на

1- docker build -t docker.local:5000/eliza/console:0.0.1 .
2- docker run -d -p 5000:5000 --name registry registry:2
3- docker tag a3703d02a199 docker.local:5000/eliza/console:0.0.1
4- docker push docker.local:5000/eliza/console:0.0.1
5- curl -X GET http://docker.local:5000/v2/eliza/console/tags/list

И тогда, когда вы используетеminikube ssh, сделайте запись дляdocker.local в/etc/hosts

docker.local 192.168.0.101

затемcurl -X GET http://docker.local:5000/v2/eliza/console/tags/list

Edit-1

Для решения проблемы TLS необходимо остановить службу докера внутри мини-куба.

systemctl stop docker

Затем отредактируйте/etc/systemd/system/docker.service.d/10-machine.conf и изменить

ExecStart = / usr / bin / docker daemon -H tcp: //0.0.0.0: 2376 -H unix: ///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem - tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider = virtualbox --insecure-registry 10.0.0.0/24

в

ExecStart = / usr / bin / docker daemon -H tcp: //0.0.0.0: 2376 -H unix: ///var/run/docker.sock --tlsverify --tlscacert /etc/docker/ca.pem - tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider = virtualbox --insecure-registry 10.0.0.0/24 --insecure-registry docker.local: 5000 - небезопасный реестр 192.168.1.4:5000

Затем перезагрузите демон и запустите службу Docker.

systemctl daemon-reload
systemctl start docker

После этого попробуйте потянуть

docker pull docker.local:5000/eliza/console:0.0.1

И команда должна работать

 mibrahim.iti06 сент. 2017 г., 17:41
Спасибо за ваш ответ, и на самом деле это мне очень помогло :), и теперь я могу получить доступ к URL из Minikube SSH, но моя главная проблема на самом деле в получении изображения из kubernetes, пожалуйста, проверьте обновление моего вопроса, и я надеюсь, что вы тоже можете помочь мне в этом
 mibrahim.iti13 сент. 2017 г., 14:07
я не могу получить этот файл /etc/systemd/system/docker.service.d/10-machine.conf внутри minikube v0.22.1, они распределены по новому пути? я могу видеть только то же содержимое старого файла (10-machine.conf) внутри этого файла /usr/lib/systemd/system/docker.service, но когда я добавляю --insecure-registry к нему и снова запускаю docker, я могу ' тяните изображения из моего локального реестра
 Tarun Lalwani13 сент. 2017 г., 16:10
Вы проверяете, где находится файл dropin.systemctl status docker
Как получить доступ к процессам, запущенным на хост-машине, из контейнера Docker?

https://stackoverflow.com/a/24326540/6785908 Есть и другие способы, например, для Docker на Mac,docker.for.mac.localhost DNS-имя будет разрешено на хост-машине

Изhttps://docs.docker.com/docker-for-mac/networking/#i-cannot-ping-my-containers

У Mac есть изменяющийся IP-адрес (или его нет, если у вас нет доступа к сети). Начиная с 17.06, мы рекомендуем подключаться к специальному DNS-имени только для Mac с именем docker.for.mac.localhost, которое будет разрешать внутренний IP-адрес, используемый хостом.

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

Способ 2. Направьте интерфейс командной строки Docker на демон Docker, работающий в вашем мини-кубе, а затем выполните там команду docker build.

Первое, что нужно понять, это то, что когда вы устанавливаете Docker на свой компьютер, он состоит из 2 частей: 1) Docker Cli, с которым вы можете взаимодействовать с Docker Daemon. 2) Docker Daemon. В этом методе мы указываем наш локальный docker cli на демон docker minikube и выполняемdocker build.

https://github.com/kubernetes/kubernetes.github.io/blob/master/docs/getting-started-guides/minikube.md#reusing-the-docker-daemon

цитируя соответствующие части здесь

При использовании одной виртуальной машины Kubernetes очень удобно повторно использовать встроенный в Minikube демон Docker; поскольку это означает, что вам не нужно создавать реестр докеров на хост-машине и вставлять в него образ - вы можете просто встроить в тот же демон докеров, что и мини-куб, что ускоряет локальные эксперименты. Просто убедитесь, что вы пометили свое изображение Docker чем-то отличным от «последней» и используете этот тег, пока вы тянете изображение. В противном случае, если вы не укажете версию своего изображения, она будет принята как: последняя, ​​с политикой извлечения изображения, равной Всегда соответственно, что может в конечном итоге привести к ErrImagePull, так как у вас может не быть версий вашего образа Docker там по умолчанию Реестр докеров (обычно DockerHub) пока нет.

Чтобы иметь возможность работать с демоном docker на вашем компьютере mac / linux, используйте команду docker-env в вашей оболочке:

eval $ (minikube docker-env)

Теперь вы сможете использовать docker в командной строке на вашем компьютере mac / linux, общаясь с демоном docker внутри виртуальной машины minikube:

выполните команду docker container list:docker ps, Он должен отображать даже контейнеры, относящиеся к системе kubernetes (потому что теперь ваш клиент указывает на демон-докер, на котором работает ваш мини-куб).

Теперь создайте свой образ докера. Тогда он будет доступен в миникубе для вас.

 so-random-dude23 мар. 2018 г., 07:09
Спасибо @Andre .. Это на самом деле мой PR, который обновил официальную документацию. Рад видеть, что это помогло вам!
 Andre23 мар. 2018 г., 06:53
«убедитесь, что вы пометили свое изображение Docker чем-то отличным от« последней »и используете этот тег, пока вы извлекаете изображение»: это сделало это для меня.

чтобы указать интерфейс командной строки вашего докера на minikube: eval $ (minikube docker-env), а затем вы можете создавать свои изображения там или экспортировать их из того места, где они у вас есть, и импортировать.

Ваш ответ на вопрос