Запуск ожидания появления в Docker Alpine — такого файла или каталога нет

Я новичок в тестировании bash и хотел создать образ докера для тестирования командной строки. Я обнаружил «ожидание» и захотел опробовать его на этом примере сценария bash. Единственная проблема заключается в том, что он не может создать файл.

данные/que.sh

#!/bin/bash
echo "Enter your name"
read $REPLY
echo "Enter your age"
read $REPLY
echo "Enter your salary"
read $REPLY

данные/test.sh

#!/usr/bin/expect -f
 
set timeout 2
spawn /data/que.sh
expect "Enter your name\r"
send -- "I am Steve\r"
expect "Enter your age\r"
send -- "2\r"
expect "Enter your salary\r"
send -- "10k\r"
expect eof

docker-compose.yml

services:
  linux-expect:
    container_name: cont-alpine-linux-expect
    image: img-alpine-linux-expect
    build:
      context: .

Докфайл

FROM alpine:latest
RUN apk add --update nodejs-current npm

USER root
RUN apk update && apk add expect

RUN mkdir data
COPY data /data

CMD ["node", "-e","setTimeout(() => console.info(999999), 99999999)"]
# Just run temporary timeout so we can interact with script

команда терминала

  • docker-compose --build

новый терминал

  • docker exec -it cont-alpine-linux-expect sh
  • ожидать данных/test.sh

Я получаю сообщение об ошибке при поиске этого файла, но он существует. Я root-пользователь.

Ошибка

"породить /data/que.sh" (файл «data/test.sh», строка 4)

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема в том, что он не может найти bash. У вас есть

#!/bin/bash

в качестве первой строки вашего сценария, поэтому оболочка ищет bash для его запуска. Но bash не установлен в образах Alpine.

Вы можете увидеть, работает ли ваш скрипт с помощью /bin/sh. Я думаю, это ракушка ash на изображениях Alpine. Если не помогло, можно установить bash из образа с помощью apk.

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

Steve Tomlin 18.06.2024 10:14

Извините, я не знаком с ожиданием, поэтому не знаю.

Hans Kilian 18.06.2024 10:20

Это не верно:

read $REPLY

команда read принимает имена переменных в качестве аргументов.

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

После второго эха bash видит read I am Steve

  • переменная I получает значение 2
  • переменные am и Steve получают пустые значения.

После третьего эха, потому что ОТВЕТ не прижился после предыдущего read, у вас снова read I am Steve

  • переменная I получает значение «10 тыс.»
  • переменные am и Steve получают пустые значения.

Другие вопросы по теме