Dockerfile:如何使用curl下载文件并复制到容器中

Dockerfile:如何使用curl下载文件并复制到容器中,docker,docker-compose,dockerfile,prisma,Docker,Docker Compose,Dockerfile,Prisma,在本例中,我将wait-for-it.sh复制到/app/wait-it.sh中 但是,我不想将wait-for-it.sh保存在本地目录中。我想使用curl下载它,然后复制到/app/wait-it.sh FROM prismagraphql/prisma:1.34.8 COPY ./wait-for-it.sh /app/wait-for-it.sh RUN chmod +x /app/wait-for-it.sh ENTRYPOINT ["/bin/sh","-c","/app/wait-

在本例中,我将wait-for-it.sh复制到/app/wait-it.sh中 但是,我不想将wait-for-it.sh保存在本地目录中。我想使用curl下载它,然后复制到/app/wait-it.sh

FROM prismagraphql/prisma:1.34.8
COPY ./wait-for-it.sh /app/wait-for-it.sh
RUN chmod +x /app/wait-for-it.sh
ENTRYPOINT ["/bin/sh","-c","/app/wait-for-it.sh mysql:3306 --timeout=0 -- /app/start.sh"]
我尝试的是这样,但是在使用curl命令下载文件后,如何获得
wait it.sh

FROM prismagraphql/prisma:1.34.8

FROM node:11-slim

RUN apt-get update && apt-get install -yq build-essential dumb-init

RUN curl -LJO https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh

COPY wait-for-it.sh /app/wait-for-it.sh

RUN chmod +x /wait-for-it.sh

ENTRYPOINT ["/bin/sh","-c","/wait-for-it.sh mysql:3306 --timeout=0 -- /app/start.sh"]

根据您在下面的评论,您可以尝试以下方法:

FROM prismagraphql/prisma:1.34.8

RUN apk update && apk add build-base dumb-init curl

RUN curl -LJO https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh

RUN cp wait-for-it.sh /app/

RUN chmod +x /wait-for-it.sh

ENTRYPOINT ["/bin/sh","-c","/wait-for-it.sh mysql:3306 --timeout=0 -- /app/start.sh"]
注意:要将脚本从容器文件系统中的一个位置复制到另一个位置,需要使用
cp
命令

您还可以通过运行以下命令确认脚本和其他文件/dir是否存在于
/app
文件夹中:

$ docker run --rm --entrypoint ls waitforit -l /app/
total 36
drwxr-xr-x    1 root     root          4096 Aug 29  2019 bin
drwxr-xr-x    2 root     root         16384 Aug 29  2019 lib
-rwxr-xr-x    1 root     root           462 Aug 29  2019 prerun_hook.sh
-rwxr-xr-x    1 root     root            61 Aug 29  2019 start.sh
-rw-r--r--    1 root     root          5224 Apr 22 13:46 wait-for-it.sh

您可以在
curl
命令不起作用时使用
-o
标志。我的意思是在运行curl命令之后,文件存储在哪里?我想将存储的文件复制到/app/wait-it.shaft运行您的解决方案后,我得到了这个/wait-it.sh:第179行:/app/start.sh:没有这样的文件或directory@UnbearableLightness:
-O
(大写)在剥离路径后,自动创建URL中存在的文件名。如果我使用的是
-o
,我也会指定文件名。@Ashik:您确定在生成图像时使用了上述Dockerfile内容吗?我可以在
src
目标中查看文件。检查我的最新答案。我发布的Dockerfile代码中没有任何更改。请尝试我添加的命令并粘贴结果。另外,如果我运行
docker run--rm-it waitforit
,我会得到输出:
wait-for-it.sh:waiting-for-mysql:3306,没有超时
@Technext是的,我检查了curl手册页,不知道这一点。