-1

我正在通过 Docker 和 ECS Fargate 构建和部署应用程序。我在 ECS 任务定义中定义了我的入口点命令。将映像推送到私有 ECR 存储库后,当 ECS Fargate 尝试部署 docker 映像时出现此错误。任何意见将是有益的。下面是 dockerfile、任务定义和错误。

Dockerfile

FROM centos:7
COPY /src/main/build/application.zip /tmp/application.zip

COPY /src/main/residual-container-setup/application/init.sh /tmp/init.sh

#Environment variables and Entry point being defined via task definition    

任务定义

{
"containerDefinitions": [
    {
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/application",
          "awslogs-region": "us-east-2",
          "awslogs-stream-prefix": "ecs"
        }
      },
      "entryPoint": [
        "[\"/bin/sh -c\"",
        "\"/tmp/init.sh\"]"
      ],
      "portMappings": [
        {
          "hostPort": 9003,
          "protocol": "tcp",
          "containerPort": 9003
        }
      ],
      "cpu": 0,
      "environment": [
        {
          "name": "HOST",
          "value": "dev.application.com"
        },
        {
          "name": "REST_PORT",
          "value": "8003"
        }
      ],
      "mountPoints": [],
      "volumesFrom": [],
      "image": "xxxxxxxxxxxx.dkr.ecr.us-east-2.amazonaws.com/application:latest",
      "essential": true,
      "name": "application"
    }
  ]

错误

container_linux.go:380: starting container process caused: exec: "[\"/bin/sh -c\"": stat ["/bin/sh -c": no such file or directory

我尝试使用以下命令在本地运行容器:`docker run -it $docker_image /bin/sh

我什至无法执行到容器中。我相信我可能需要在图像中额外安装才能使其正常工作。任何意见将是有益的。

更新 我已经更新了 dockerfile 以使用以下命令更新 init 脚本的权限:chmod +x /tmp/init.sh

我还将任务定义入口点属性更新为["/bin/sh", "-c", "/tmp/init.sh"]

进行这些更改后,我现在看到以下内容:

container_linux.go:380: starting container process caused: exec: "-c": executable file not found in $PATH
4

1 回答 1

0

您的入口点定义错误。你这样做的方式 Linux 认为二进制文件的路径是“/bin/sh -c”。如果您检查容器图像,我很确定您也找不到该文件。

于 2021-09-28T04:31:20.323 回答