使用 micromamba 基础映像的 Docker 容器无法在 AWS Batch 上运行(/usr/local/bin/_entrypoint.sh 问题)

问题描述 投票:0回答:1

这是我的 Dockerfile:

# v2024.3.4
# =============================
FROM --platform=linux/amd64 mambaorg/micromamba:1.5.6

SHELL ["/usr/local/bin/_dockerfile_shell.sh"]

WORKDIR /tmp/

# Data
USER root
RUN mkdir -p /volumes/
RUN mkdir -p /volumes/input
RUN mkdir -p /volumes/output
RUN mkdir -p /volumes/database

ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
ENV MPLBACKEND agg
ENV XDG_CONFIG_HOME /home/qiime2


# Retrieve repository
USER $MAMBA_USER
RUN micromamba install -y -n base -c conda-forge wget ca-certificates

ARG MAMBA_DOCKERFILE_ACTIVATE=1
RUN wget --no-check-certificate https://data.qiime2.org/distro/amplicon/qiime2-amplicon-2024.2-py38-linux-conda.yml

# Install dependencies
RUN micromamba install -y -n base \
    -c https://packages.qiime2.org/qiime2/2024.2/amplicon/released \
    -c bioconda \
    -c conda-forge \
    -c defaults \
    -f /tmp/qiime2-amplicon-2024.2-py38-linux-conda.yml && \ 
    micromamba clean -a -y -f

RUN rm -rf /tmp/qiime2-amplicon-2024.2-py38-linux-conda.yml
# RUN qiime dev refresh-cache


ENTRYPOINT ["/usr/local/bin/_entrypoint.sh"]

这是我在 AWS 上的工作定义:

{
  "jobDefinitionName": "qiime2-classify-vsearch__16S-rRNA_JB021824-gtdb_ssu_all_r207",
  "type": "container",
  "containerProperties": {
    "image": "jolespin/qiime2-amplicon:2024.2",
    "command": [
      "mkdir -p",
      "/volumes/output/taxonomic_classification/16S-rRNA_JB021824/vsearch/gtdb_ssu_all_r207/",
      "&&",
      "qiime",
      "feature-classifier",
      "classify-consensus-vsearch",
      "--i-query",
      "/volumes/input/16S-rRNA_JB021824/seqs.qza",
      "--i-reference-reads",
      "/volumes/database/gtdb_ssu_all_r207/seqs.qza",
      "--i-reference-taxonomy",
      "/volumes/database/gtdb_ssu_all_r207/tax.qza",
      "--p-threads",
      "16",
      "--o-classification",
      "/volumes/output/taxonomic_classification/16S-rRNA_JB021824/vsearch/gtdb_ssu_all_r207/classification.qza",
      "--o-search-results",
      "/volumes/output/taxonomic_classification/16S-rRNA_JB021824/vsearch/gtdb_ssu_all_r207/search-results.qza",
      "--verbose"
    ],
    "jobRoleArn": "arn:aws:iam::[redacted_identifier]:role/ecsTaskExecutionRole",
    "executionRoleArn": "arn:aws:iam::[redacted_identifier]:role/ecsTaskExecutionRole",
    "volumes": [
      {
        "name": "efs-volume-database",
        "efsVolumeConfiguration": {
          "fileSystemId": "fs-[redacted_identifier]",
          "transitEncryption": "ENABLED",
          "rootDirectory": "databases/qiime2/"
        }
      },
      {
        "name": "efs-volume-input",
        "efsVolumeConfiguration": {
          "fileSystemId": "fs-[redacted_identifier]",
          "transitEncryption": "ENABLED",
          "rootDirectory": "projects/Amplicon/Data/"
        }
      },
      {
        "name": "efs-volume-output",
        "efsVolumeConfiguration": {
          "fileSystemId": "fs-[redacted_identifier]",
          "transitEncryption": "ENABLED",
          "rootDirectory": "projects/Amplicon/Analysis/"
        }
      }
    ],
    "mountPoints": [
      {
        "sourceVolume": "efs-volume-database",
        "containerPath": "/volumes/database",
        "readOnly": true
      },
      {
        "sourceVolume": "efs-volume-input",
        "containerPath": "/volumes/input",
        "readOnly": true
      },
      {
        "sourceVolume": "efs-volume-output",
        "containerPath": "/volumes/output",
        "readOnly": false
      }
    ],
    "environment": [],
    "ulimits": [],
    "resourceRequirements": [
      {
        "value": "16.0",
        "type": "VCPU"
      },
      {
        "value": "65536",
        "type": "MEMORY"
      }
    ],
    "networkConfiguration": {
      "assignPublicIp": "ENABLED"
    },
    "fargatePlatformConfiguration": {
      "platformVersion": "LATEST"
    },
    "ephemeralStorage": {
      "sizeInGiB": 40
    }
  },
  "tags": {
    "Name": "qiime2-classify-vsearch__16S-rRNA_JB021824-gtdb_ssu_all_r207"
  },
  "platformCapabilities": [
    "FARGATE"
  ]
}

当我运行作业时,出现以下错误:

/usr/local/bin/_entrypoint.sh: line 24: exec: mkdir -p: not found

当我在本地运行容器时,它发现 mkdir 很好:

docker run --name test --rm -it jolespin/qiime2-amplicon:2024.2 bash

(base) mambauser@a51e78ef660d:/tmp$ which mkdir
/usr/bin/mkdir

如何让我的 Docker 容器与 AWS Batch 一起按预期工作?

amazon-web-services docker containers aws-batch micromamba
1个回答
0
投票

基本上,一个问题会导致两个错误。提供给作业定义的“命令”应该是一个可以直接传递给 Popen 的数组,这意味着它应该是一个可以运行的可执行文件,后面跟着一系列命令选项。

这导致了第一个错误,

"mkdir -p"
应该分成
"mkdir", "-p"
。这将允许第一个命令运行,因为“mkdir”是一个可执行文件,但更进一步,您还有
"&&"
,这是运行多个命令的 shell 语法。由于您确实正在尝试运行 shell 命令,因此您可以明确说明它,并运行如下命令:

    "command": [
      "/bin/bash", "-c",
      "mkdir -p /path/to/make && qiime --options \"Example String\"",
    ],

这将启动 bash 来解析整个字符串,并依次运行每个命令。请注意,您现在将所有选项作为一个字符串传递,因此您需要引用任何需要空格的选项,就像我在这里对“示例字符串”所做的那样。

© www.soinside.com 2019 - 2024. All rights reserved.