【发布时间】:2019-06-14 08:26:42
【问题描述】:
我正在尝试从 Dockerfile 构建 Docker 映像,该 Dockerfile 复制并提取包含可执行文件(myapp 以及其他文件)的 .zip 存档。有一个运行可执行文件的docker-entrypoint.sh 脚本。 docker build 成功完成,但是当我运行映像时,入口点脚本失败,提示找不到可执行文件。
$ docker build .
Successfully built 890ec2f09ad4
$ docker run 890ec2f09ad4
./docker-entrypoint.sh: line 3: ./myapp: not found
我已验证可执行文件已从存档中提取,并且通过在docker-entrypoint.sh 脚本中执行ls -l,该命令正在正确的目录中运行。
-rwxrwxr-x 1 root root 45 Jan 20 22:16 docker-entrypoint.sh
-rwxr-xr-x 1 root root 71473 Jan 20 22:16 myapp
-rw-r--r-- 1 root root 177 Jan 20 22:16 myapp.ini
如果我在 Docker 映像之外运行相同的 docker-entrypoint.sh 脚本,在可执行文件旁边,一切正常。
我也试过了:
- 直接从 Dockerfile 运行可执行文件(导致类似的“找不到文件”错误)
- 使用
ubuntu:latest基础镜像(同样的错误) - 使用 dos2unix 确保行尾正确(无变化)
我还能尝试什么?我是 Docker 新手,这似乎应该很容易完成,所以我不确定我哪里出错了......
Dockerfile:
FROM alpine:latest
RUN mkdir -p /opt/app/
WORKDIR /opt/app/
COPY target/products/myapp.zip .
RUN unzip myapp.zip && rm myapp.zip
COPY docker-entrypoint.sh .
RUN chmod +x docker-entrypoint.sh
ENTRYPOINT ["./docker-entrypoint.sh"]
docker-entrypoint.sh:
#!/bin/sh
./myapp
【问题讨论】:
-
如果您在容器运行时访问它,您能否确认您的文件在您期望的位置?
docker exec -it container-name sh假设解压缩操作成功了,我觉得没问题。 -
你的应用中有什么?它是单个文件还是树目录?你想跑什么?
-
@ChrisTurner 刚刚连接到容器,.zip 存档中的所有内容都在
/opt/app/中,并且我验证了权限是否符合预期 -
我想接下来我会尝试将您的入口点更改为绝对位置,例如
/opt/app/docker-entrypoint.sh -
@VolArt
myapp文件是单个 ELF 64 位 LSB 可执行文件
标签: docker sh dockerfile alpine