Почему docker работает с неизвестным операндом, в то время как тот же сценарий оболочки отлично работает на машине с Ubuntu - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь выполнить ./login.sh как часть docker run, теперь, когда я запускаю ./login.sh в машине с Ubuntu, я вижу ответ об успехе, но когда я создаю docker изображение, я вижу вывод как sh: abc: unknown operand “invalid url”

Вот содержимое ./login.sh

 #!/bin/sh
 # Black Box Tester!


content=$(curl  --location --request POST "https://api.platform.abc.com. 
/auth/oauth/token" --header 'Content-Type: application/x-www-form- 
urlencoded' \
 --header 'Authorization: Basic V0zSA==' --data-raw 'grant_type=password&
username=test@example.com&password=123456'| jq -r '.domain_id' )
if [ $content = abc ]
     then
          echo “Valid Login Token”
else
          echo “invalid url”
fi

, а вот содержимое docker file

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y curl   \
    && apt-get -y install jq


FROM openjdk:8-jre-alpine

RUN apk --no-cache add curl jq


WORKDIR /opt


ADD login.sh /opt

RUN pwd  \
   && find /opt



CMD ["./login.sh"]

Когда то же самое ./login.sh я обычно выполняю в Ubuntu машина, я получаю успешный вывод как

    ubuntu@ip-172-31-29-248:~$ ./login.sh 
   % Total    % Received % Xferd  Average Speed   Time    Time     Time    
  Current
                             Dload  Upload   Total   Spent    Left  Speed
100  2034  100  1958  100    76   9458    367 --:--:-- --:--:-- --:--:--  
9873
“Valid Login Token”

Вот вывод sudo docker run lots/loginimage

 ubuntu@ip-172-31-29-248:~$ sudo docker run lots/loginimage
 ./login.sh: line 6: jq: not found
   % Total    % Received % Xferd  Average Speed   Time    Time     Time       
 Current
                             Dload  Upload   Total   Spent    Left  Speed
 92  2034   92  1807  100    76   7199    302 --:--:-- --:--:-- --:--:--      
7501
curl: (23) Failed writing body (0 != 1024)
sh: abc: unknown operand
“invalid url”

Может кто-нибудь дать мне знать, почему скрипт входа, который является просто командой curl, успешно выполняется в Ubuntu машина, но тот же сценарий входа показывает еще условие в docker запустить?

Также я включил код в docker файл для загрузки и установки Json путь jq, но почему изображение все еще говорит ./login.sh: line 6: jq: not found ??

Ваша помощь высоко ценится

1 Ответ

0 голосов
/ 05 марта 2020

При создании docker вам необходимо установить jq sudo apt-get install jq

...