gpt4 book ai didi

linux - 在 Windows 和 Linux 上的 Dockerfile 中使用 RUN 命令

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:07 27 4
gpt4 key购买 nike

在我的 Dockerfile 中有

FROM microsoft/dotnet:2.1-sdk
COPY devops/scripts/setup.sh .
RUN ls
RUN chmod +x ./setup.sh
RUN ./setup.sh
WORKDIR /app

我使用的第 3 步只是为了显示该文件实际存在。

在 docker-compose 中使用时,它在 Linux 上完美运行,但在 Windows 上运行 docker-compose up 时,它会导致 p>

> docker-compose up
Building create_template
Step 1/6 : FROM microsoft/dotnet:2.1-sdk
---> 511c1f563ce6
Step 2/6 : COPY devops/scripts/setup.sh .
---> 3d3bb4ab9bc4
Step 3/6 : RUN ls
---> Running in 43ad6e244ed8
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
setup.sh <---
srv
sys
tmp
usr
var
Removing intermediate container 43ad6e244ed8
---> aa32210d6a87
Step 4/6 : RUN chmod +x ./setup.sh
---> Running in 2d6858495355
Removing intermediate container 2d6858495355
---> 5e0388623851
Step 5/6 : RUN ./setup.sh
---> Running in abb3a52fe6ec
/bin/sh: 1: ./setup.sh: not found
ERROR: Service 'create_template' failed to build: The command '/bin/sh -c ./setup.sh' returned a non-zero code: 127

有没有办法在两个系统上使用相同的 dockerimage 文件和命令,或者我是否必须为每个系统使用备用 dockerimage 和 docker-compose?谢谢

最佳答案

我在 Windows 上试过你的例子并重现了你的问题。

根本原因是当你在windows上新建文件setup.sh时,它是DOS格式。在 compose 或 build 之前,你需要使用 git-bash 或其他类似工具将主机上的文件格式提前转换为 unix 格式,例如:

dos2unix setup.sh

另一种方法是在 Dockerfile 中执行,这在您使用 linux 主机时也兼容,如下所示:

RUN apt-get update && apt-get install -y dos2unix && dos2unix setup.sh
RUN ./setup.sh

关于linux - 在 Windows 和 Linux 上的 Dockerfile 中使用 RUN 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56437175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com