在Docker文件内运行shell脚本文件

ki0zmccv  于 2023-03-01  发布在  Docker
关注(0)|答案(1)|浏览(299)

我已经创建了一个停靠文件

FROM alpine
RUN apk update --no-cache && apk add --no-cache --upgrade bash && apk add curl
COPY test-start.sh ./test-start.sh
RUN chmod +x ./test-start.sh
RUN sh ./test-start.sh

我已经创建了www.example.com文件test-start.sh file

#!/bin/bash
code=$(curl https://someendpoint)

if [ $code == "200" ]
then
  exit 0
else
  exit 1
fi

我想要做的是在创建Docker映像时执行此shell脚本,如果得到200响应,则继续构建映像,否则停止构建映像并抛出错误。现在,当我尝试构建Docker映像时,我收到了一个错误

[+] Building 10.9s (10/10) FINISHED
 => [internal] load build definition from Dockerfile.dev                                                           0.1s
 => => transferring dockerfile: 1.18kB                                                                             0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/alpine:latest                                                   1.9s
 => [auth] library/alpine:pull token for registry-1.docker.io                                                      0.0s
 => [internal] load build context                                                                                  0.1s
 => => transferring context: 35B                                                                                   0.0s
 => CACHED [1/5] FROM docker.io/library/alpine@sha256:69665d02cb32192e52e07644d76bc6f25abeb5410edc1c7a81a10ba3f0e  0.0s
 => [2/5] RUN apk update --no-cache && apk add --no-cache --upgrade bash && apk add curl                           6.0s
 => [3/5] COPY test-start.sh ./test-start.sh                                                                       0.2s
 => [4/5] RUN chmod +x ./test-start.sh                                                                             0.7s
 => ERROR [5/5] RUN sh ./test-start.sh                                                                             1.9s
------
 > [5/5] RUN sh ./test-start.sh:
#10 0.790   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#10 0.790                                  Dload  Upload   Total   Spent    Left  Speed
100     5  100     5    0     0      4      0  0:00:01  0:00:01 --:--:--     4
: not found/test-start.sh: line 3:
#10 1.810 ./test-start.sh: line 9: syntax error: unexpected "fi" (expecting "then")
------
executor failed running [/bin/sh -c sh ./test-start.sh]: exit code: 2

我不知道错误是什么,也不知道该如何解决。
也请让我知道,如果我在这里做错了什么,因为我是新的,并学习如何做到这一点。
谢谢你!

2w2cym1i

2w2cym1i1#

syntax error: unexpected "fi" (expecting "then")看起来很奇怪。即使是没有引号的$code也不应该导致这样的错误。
请检查您的脚本是否有Windows行尾(例如使用file test-start.sh)。如果需要,请将文件转换为Linux行尾(例如使用dos2unix test-start.sh)。
之后,您可能会得到另一个错误,eidogg. [: too many arguments。如果是这样的话,请查看Cornuz的评论。
变量code不包含http状态,但curl的stdout是http主体(例如<HTML>...</HTML>,如果你正在查询一个网站)。然后告诉curl使用curl -s -o /dev/null -w "%{http_code}" http://...只输出http状态代码。
顺便说一句:if [ ... ]; then exit 0; else exit 1; fi有点多余,你可以只使用[ ... ]

#!/bin/bash
code=$(curl curl -s -o /dev/null -w "%{http_code}" http://...)
[[ "$code" = "200" ]]

相关问题