docker容器可执行文件不能执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker容器可执行文件不能执行相关的知识,希望对你有一定的参考价值。

参考技术A 原因是docker可执行文件没有默认添加到path变量中。添加到用户本地路径,执行一下 sh .bash_profile 就可以用docker命令了。

如何使用 Testcontainers 将可执行文件复制到 Docker 容器

【中文标题】如何使用 Testcontainers 将可执行文件复制到 Docker 容器【英文标题】:How to copy executable file to Docker container using Testcontainers 【发布时间】:2020-07-30 04:12:35 【问题描述】:

我正在尝试将可执行的初始化 bash 脚本 init.sh 复制到使用 JUnit 5 模块使用 Testcontainers (1.13.0) 创建的 Localstack Docker 容器:

@Container
static LocalStackContainer localStack = new LocalStackContainer("0.10.0")
  .withServices(S3)
  .withCopyFileToContainer(MountableFile.forClasspathResource("init.sh"), "/docker-entrypoint-initaws.d/init.sh");

但是在创建的 Docker 容器中,该文件缺少执行权限(通过使用docker exec -it ID /bin/sh 查看文件权限进行检查)。

在我的机器上,该文件具有以下权限:

$ ls -al
total 16
drwxr-xr-x  4 xyz  staff  128 Apr 16 20:51 .
drwxr-xr-x  4 xyz  staff  128 Apr 16 08:43 ..
-rw-r--r--  1 xyz  staff  135 Apr 16 20:14 application.yml
-rwxr-xr-x  1 xyz  staff  121 Apr 16 20:51 init.sh

我也尝试使用.withClasspathResourceMapping() 复制此文件,但这需要一种仅提供READ_ONLYREAD_WRITE 的绑定模式。

【问题讨论】:

【参考方案1】:

您可以使用MountableFile 类的另一个builder,它采用带有posix 文件模式值的mode 参数来更改权限。例如,使脚本仅对所有者可执行:

...
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh", 0744), "/docker-entrypoint-initaws.d/init.sh");

0744 是八进制文件模式文字,对应于-rwxr--r-- 权限。

但是,我尝试使用 Localstack 0.10.8 进行相同的配置,并且初始化工作甚至没有使脚本可执行。

【讨论】:

以上是关于docker容器可执行文件不能执行的主要内容,如果未能解决你的问题,请参考以下文章

运行docker容器时出错:启动容器进程导致“exec:”python “:$ PATH中找不到可执行文件”:未知

32 位可执行文件不在 Docker 容器中休眠

x64 C ++可执行文件未在nanoserver docker容器中运行

Docker:OCI 运行时创建失败:container_linux.go:349:启动容器进程导致“exec:\”java\“:$PATH 中找不到可执行文件”

如何设置PhpStorm以便Docker Compose Interpreter可以使用PHP可执行文件?

Golang项目部署3,容器部署