【问题标题】:Docker - unable to run scriptDocker - 无法运行脚本
【发布时间】:2026-01-04 09:10:01
【问题描述】:

我在做什么

我正在使用 AWS 批处理来为大型计算作业运行 docker 容器。据我所知,我已成功配置 ECR/ECS,但由于超出我对 docker(新手)的理解水平而运行所需命令时遇到问题

我需要做的是将以下命令传递给我的应用程序并启动我的应用程序以执行一些繁重的计算任务;下面列出的所有命令都必须存在。

问题

当我将提交作业发送到 AWS 批处理时出现问题;此服务从 ACR(亚马逊容器存储库)中提取图像并启动计算环境。当我尝试运行我传入的命令时,问题就出现了,下面我将通过它。

           "command": [
               "mkdir -p logging",
               "chmod 777 logging/",
               "docker run -t -i -e my-application",  # container name
               "-e APIKEY",
               "-e BASEURI",
               "-e APIUSER",
               "-v WORKSPACE /logging:/src/log",
               "DOCKERIMAGE",
               "python my_app.py",
               "-t APP_USER",
               "-e APP_ENVIRONMENT",
               "-u APP_USERNAME",
               "-p APP_PASSWORD",
               "-i IN_PATH",
               "-o OUT_PATH",
               "-b tmp/"
]

上面的命令产生以下错误

container_linux.go:370:启动容器进程导致:exec:“mkdir -p log”:$PATH 中找不到可执行文件

我尝试传入命令以回显环境变量 $PATH,但未能成功获得响应并导致类似错误。

我已经成功运行“ls”并且能够看到我的应用程序的目录内容。

但是,我无法运行包含在命令 [] 部分中的任何这些命令。我曾尝试只运行 python 等,希望得到更详细的错误,但没有成功。

简单的英语逻辑

  1. 如果不存在,则创建名为 logging 的路径
  2. 设置日志记录权限
  3. 运行 docker 容器并同时传递环境变量
  4. 告诉 docker 运行 python 文件 my_app.py 并传入预期的运行时参数
  5. 执行并执行python3应用程序中指定的所需逻辑

问题

  • 为什么我不能在这里创建一个名为“logging”的目录我在哪里?
  • 我是否按照 AWS 批处理的定义正确运行这些程序?或码头工人
  • 我遗漏了什么或哪里出错了?

AWS Batch high level doc

AWS Batch link specific to what i'm doing

【问题讨论】:

    标签: python-3.x amazon-web-services docker aws-batch


    【解决方案1】:

    假设您遵循Container Properties 中描述的语法 AWS 文档的部分,您的语法有几个问题 你的command 指令。

    第一

    command 指令只能运行一个命令。您无法在示例中尝试将一堆命令混合在一起。如果您需要运行多个命令,则需要将它们作为参数嵌入到 shell 中。例如,类似:

    command: ["/bin/sh", "-c", "mkdir -p logging; chmod 777 logging; ..."]
    

    第二

    您必须正确标记您的 命令行——也就是说,当您在 命令提示符,shell 将其分为三部分(或“令牌”):['mkdir', '-p', 'logging']。在构建时你需要做同样的事情 command 的参数列表。

    这是无效的:

    command: ["mkdir -p logging"]
    

    这将寻找一个名为mkdir -p logging 的命令,当然不存在这样的命令。那应该写成:

    command: ["mkdir", "-p", "logging"]
    

    第三

    我对 AWS 批处理环境不是很熟悉,但是您不太可能像您尝试的那样在 docker` 容器中运行 docker 命令。不过,尚不清楚您为什么要这样做:为什么不使用适当的图像、环境变量等配置您的 AWS 批处理作业?

    看看其中一些example job definitions

    【讨论】:

    • 砰,钉在头上。这行得通,谢谢。 PS上面提到的标记化对于批处理来说是一样的,并且被成功接受。