【发布时间】:2020-08-14 06:54:37
【问题描述】:
我正在尝试从 migrate 容器访问二进制文件 COPYed。当我 COPY 到 python:3.7-alpine 时它可以工作,但是当我 COPY 到 debian:buster-slim 时它找不到。
重现的最少步骤:
1.创建Dockerfile.test
FROM migrate/migrate:v4.6.2 AS migrate
FROM python:3.7-alpine
COPY --from=migrate /migrate /
CMD "/migrate"
- 构建并运行。这行得通。
docker build . -t migrate_test -f Dockerfile.test
docker run --name migrate_test migrate_test:latest
Usage: migrate OPTIONS COMMAND [arg...]
migrate [ -version | -help ]
- 停止并移除容器
docker stop migrate_test;docker rm migrate_test;
- 在 Dockerfile.test 中更改镜像
FROM migrate/migrate:v4.6.2 AS migrate
FROM debian:buster-slim
COPY --from=migrate /migrate /
CMD "/migrate"
- 构建并运行。这不起作用
docker build . -t migrate_test -f Dockerfile.test
docker run --name migrate_test migrate_test:latest
/bin/sh: 1: /migrate: not found
【问题讨论】:
-
您尝试过如何调试此问题?例如,我可能会尝试
docker run --rm --entrypoint /usr/bin/ldd migrate_test /migrate来查看一个与另一个之间是否缺少共享库依赖项。 (删除ENTRYPOINT并设置CMD ["/migrate"]会减少这种尴尬。) -
@DavidMaze 好主意。我只是缩短了它。当我执行到容器中时,
/migrate以文件的形式存在,但在尝试执行时出现相同的not found错误。 -
就是这样! Ldd 显示了图像上缺少的库。安装依赖项后,它可以工作。简单的
not found错误让我大吃一惊。谢谢!
标签: docker