С bash на Windows 10, почему он выполняет мой $ () как отдельные команды? - PullRequest
1 голос
/ 07 августа 2020

Я учусь работать с Docker и Minikube на домашнем компьютере Windows 10. Я установил необходимое программное обеспечение. Я установил Docker, minikube, kubectl и последнюю версию MySQL, исправленные должным образом, чтобы можно было использовать его интерфейс командной строки. Я использую консоль Bash, предоставленную GIT, и / или Bash, предоставленную Cygwin. Оба, кажется, дают одинаковые (плохие) результаты.

Я запускаю Docker и устанавливаю службу MySQL. Команда kubectl get all показывает, что все работает нормально.

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

mysql -h $(minikube service mysql-svc --format "{{.IP}}") -P $(minikube service mysql-svc --format "{{.Port}}") -u root -p

Результат должен быть приглашение MySQL CLI, например mysql>. Вместо этого я получаю следующее поведение:

  1. Всплывающее окно с сообщением: «Windows не может найти '192.168.99.101'. Убедитесь, что вы правильно ввели имя, а затем повторите попытку».

  2. Текст консоли:

    Система не может найти файл 192.168.99.101.

    *

    Ошибка открытия URL-адреса X: 192.168. 99.101: статус выхода 1

    *

    * minikube выходит из-за ошибки. Если приведенное выше сообщение бесполезно, откройте проблему:

    - (URL-адрес для отправки сообщения об ошибке)

  3. Всплывающее окно с сообщением «Windows не удается найти» 31067 '. Убедитесь, что вы правильно ввели имя, а затем повторите попытку. "

  4. Текст консоли:

    mysql: [ОШИБКА] Неизвестный суффикс' | ' используется для переменной 'порт' (значение (дает границу, которая окружает вывод службы minikube mysql -sv c.) mysql: [ОШИБКА] (путь к mysql .exe): Ошибка при установке value '| ----- | --- (et c)' to 'port'

Ожидаемое поведение - вставка IP и порта в mysql в командной строке, а затем запустить команду типа mysql -h http://192.168.99.101 -P 31067 -u root -p.

Я думаю, что проблема связана с использованием Bash в среде Windows. Любое объяснение приветствуется.

Спасибо,

Джером.

ОБНОВЛЕНИЕ 07.08.2020:

Меня просят более тщательно задокументировать мою проблему. Здесь мы go.

Вот что знает Docker:

$ docker images
REPOSITORY                                                        TAG
      IMAGE ID            CREATED             SIZE
logicaltiger/cloudnative-statelessness-posts                      latest
      3a3c66daf7f3        5 days ago          139MB
logicaltiger/cloudnative-statelessness-connections                latest
      d060e9857f49        5 days ago          139MB
logicaltiger/cloudnative-statelessness-connectionposts-stateful   latest
      ce33f0966380        5 days ago          123MB
openjdk                                                           8-jdk-alpine
      a3562aa0b991        15 months ago       105MB
mysql                                                             8.0.12
      ee1e8adfcefb        22 months ago       484MB

Вот мой реконфигурация minikube. Другие плакаты предполагали, что minikube работает ненадежно, если не указано много ресурсов.

$ minikube delete
* Deleting "minikube" in virtualbox ...
* Removed all traces of the "minikube" cluster.

$ minikube start --cpus=4 --memory=4096
* minikube v1.12.1 on Microsoft Windows 10 Home 10.0.18363 Build 18363
* Automatically selected the virtualbox driver
* Starting control plane node minikube in cluster minikube
* Creating virtualbox VM (CPUs=4, Memory=4096MB, Disk=20000MB) ...
* Found network options:
  - NO_PROXY=192.168.99.100
  - no_proxy=192.168.99.100
* Preparing Kubernetes v1.18.3 on Docker 19.03.12 ...
  - env NO_PROXY=192.168.99.100
* Verifying Kubernetes components...
* Enabled addons: default-storageclass, storage-provisioner
* Done! kubectl is now configured to use "minikube"

После запуска mysql из его файла yaml у меня он запускается: Теперь возьмите mysql -sv c URL:

$ minikube service mysql-svc --url
http://192.168.99.102:32235

Попробуйте запустить пример книги. Я снова получаю два всплывающих окна windows и то, что показано ниже в терминале. Я опускаю здесь текст всплывающего окна ...

$ mysql -h $(minikube service mysql-svc --format "{{.IP}}") -P $(minikube service mysql-svc --format "{{.Port}}") -u root -p
The system cannot find the file 192.168.99.102.
*
X open url failed: 192.168.99.102: exit status 1
*
* minikube is exiting due to an error. If the above message is not useful, open
an issue:
  - https://github.com/kubernetes/minikube/issues/new/choose
The system cannot find the file 32235.
*
X open url failed: 32235: exit status 1
*
* minikube is exiting due to an error. If the above message is not useful, open
an issue:
  - https://github.com/kubernetes/minikube/issues/new/choose
mysql: [ERROR] Unknown suffix '|' used for variable 'port' (value '|-----------|
-----------|-------------|-------|')
mysql: [ERROR] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe: Error whil
e setting value '|-----------|-----------|-------------|-------|' to 'port'

Меня спрашивают, что произойдет, если я введу IP напрямую. Сверху этот IP-адрес был http://192.168.99.102: 32235

$ mysql -h http://192.168.99.102 -P 32235 -u root -p
Enter password: **********
ERROR 2005 (HY000): Unknown MySQL server host 'http://192.168.99.102' (0)

При прямом вводе IP-адреса и порта был достигнут MySQL сервер IS (см. "Введите пароль:"), но запрос отклонен. Я думаю, что не знаю, как заставить MySQL использовать HTTP-запрос.

Но разве MySQL не знает, что делать с IP-адресом, и как косвенный метод ( служба minikube mysql -sv c ...), связанная?

Продолжая, я редактирую свой файл cookbook-deployment-posts.yaml с адресом MySQL:

kind: Service
apiVersion: v1
metadata:
  name: posts-svc
spec:
  selector:
    app: posts
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 8080
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: posts
  labels:
    app: posts
spec:
  replicas: 1
  selector:
    matchLabels:
      app: posts
  template:
    metadata:
      labels:
        app: posts
    spec:
      containers:
      - name: posts
        image: cdavisafc/cloudnative-statelessness-posts
        env:
          - name: INSTANCE_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
          - name: PORT
            value: "8080"
          - name: SPRING_APPLICATION_JSON
            value: '{"spring":{"datasource":{"url":"jdbc:mysql://192.168.99.102:32235/cookbook"}}}'

При переходе на kubectl get all, постоянно запускается posts-sv c, выдает ошибки и перезагружается. Не знаю, в чем дело ...

Джером.

1 Ответ

1 голос
/ 12 августа 2020

Теперь я вижу, что некоторые вещи идут не так.

Сначала , я все думаю, что вызов mysql каким-то образом связан с MySQL, установленным на моем P C. Этого никогда не бывает. Тот факт, что я вручную создаю базу данных поваренной книги на моем экземпляре P C, не означает, что пример из учебника через Docker / Minikube когда-либо ссылается на него.

Второй , учебник отсутствует --url в его запросах minikube. Вот что происходит.

> kubectl create -f mysql-deployment.yaml

> minikube service mysql-svc --url
http://192.168.99.102:31030

> minikube service mysql-svc

Откроется веб-браузер, чтобы показать службу по адресу 192.168.99.102:31030. Служба mysql не отображает веб-страницу, но в данном примере это не имеет значения. Затем консоль показывает подробную информацию о службе (пространство имен, имя, целевой порт, URL-адрес) в Поле ASCII.

minikube service mysql-svc --format "{{.IP}}"

Он хочет открыть веб-браузер, чтобы показать службу по адресу http://192.168.99.102 с предполагаемым портом 80. Но там ничего нет и Windows жалуется на всплывающее окно. Затем консоль жалуется, что не открывает этот URL-адрес.

minikube service mysql-svc --format "{{.Port}}"

Он хочет открыть веб-браузер, чтобы показать службу по адресу 31030, который не является допустимым URL-адресом. Жалобы, жалобы.

Все, что я действительно хотел, это добавить --url к битам minikube:

mysql -h $(minikube service mysql-svc --format "{{.IP}}" --url) -P $(minikube service mysql-svc --format "{{.Port}}" --url) -u root -p

Это подключается к управляемому mysql в консоли, давая приглашение mysql>. Теперь я могу запустить команду «создать кулинарную книгу базы данных».

Решено!

...