Failure starting Docker container. "failed to create shim task: OCI runtime create failed: runc create failed"

plu*_*ium 56 docker docker-compose

I am new to Ubuntu and new to Docker. I am running a command that was given to me in an explanation of how to start the project. I want to start my Docker containers and they fail with an error.

Some notes:

  • It is a new Ubuntu laptop.
  • 我添加了Docker以获得sudo特权。在它响应的列表中groups产生。docker

这是我用来启动它的命令:docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d --build

它给出:

Step 11/12 : EXPOSE $PORT
 ---> Using cache
 ---> 7620427ebfe9
Step 12/12 : CMD ["ts-node", "./src/server.ts"]
 ---> Using cache
 ---> 00a32820e6e2
Successfully built 00a32820e6e2
Successfully tagged backend-marketplace_backend:latest
backend-marketplace_database_1 is up-to-date
Starting backend-marketplace_backend_1 ...
Starting backend-marketplace_backend_1 ... error

ERROR: for backend-marketplace_backend_1  Cannot start service backend: failed to create shim task:
OCI runtime create failed: runc create failed: unable to start container process: error during container init:
error mounting "/var/lib/docker/volumes/3ceff6572cda1981f7d29faf09f888cb9a8c0c5ac41b10bb323eb5d14e7e1d35/_data"
to rootfs at "/app/node_modules": mkdir /var/lib/docker/overlay2/c0a5b761bb9a94bb9a4dd3c21a862968dbbabe87698c0f744569ea56e323ea0e/merged/app/node_modules:
read-only file system: unknown

ERROR: for backend  Cannot start service backend: failed to create shim task:
OCI runtime create failed: runc create failed: unable to start container process: error during container init:
error mounting "/var/lib/docker/volumes/3ceff6572cda1981f7d29faf09f888cb9a8c0c5ac41b10bb323eb5d14e7e1d35/_data" to rootfs at
"/app/node_modules": mkdir /var/lib/docker/overlay2/c0a5b761bb9a94bb9a4dd3c21a862968dbbabe87698c0f744569ea56e323ea0e/merged/app/node_modules:
read-only file system: unknown
ERROR: Encountered errors while bringing up the project.
Run Code Online (Sandbox Code Playgroud)

我看到docker-compose.ymldocker-compose.dev.yml提到过,它们是:

docker-compse.yml:

version: "3"
services:
  backend:
    build: .
    ports:
      - "8000:8000"
    env_file:
      - ./.env

Run Code Online (Sandbox Code Playgroud)

docker-compose.dev.yml

version: "3"
services:
  backend:
    build:
      context: .
      args:
        NODE_ENV: development
    volumes:
      - ./:/app:ro
      - /app/node_modules
    links:
      - database
    env_file:
      - ./.env
    command: npm run dev
  database:
    image: "postgres:latest"
    volumes:
      - pgdata:/var/lib/postgresql/data
    expose:
      - "5432"
    ports:
      - "5432:5432"
    env_file:
      - ./.env.database
  pgadmin:
    image: dpage/pgadmin4:latest
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=<redacted>
      - PGADMIN_DEFAULT_PASSWORD=<redacted>
      - PGADMIN_LISTEN_PORT=5454
    depends_on:
      - database
volumes:
  pgdata:
Run Code Online (Sandbox Code Playgroud)

我很想说“我找到了一些线索并尝试了他们推荐的内容”,但说实话,当我读到它们时,我还不太理解它们。以下线程可能相关,但对我来说它们读起来像拉丁语。

Windows 计算机上出现“来自守护程序的错误响应:无法创建填充程序:OCI 运行时创建失败”错误

无法启动服务 api:OCI 运行时创建失败:container_linux.go:380:启动容器进程导致:exec:“python manage.py runserver

无法启动服务应用程序:OCI 运行时创建失败:container_linux.go:349

就像,我从阅读错误消息中猜测,我需要打开某种写入权限,因为错误消息以“只读文件系统:未知”结尾。遗憾的是,我能贡献的就只有这些了。

Joh*_*Lee 17

就我而言,Docker Compose已超时,并且已损坏容器。我只需要:

  1. 增加撰写超时 (COMPOSE_HTTP_TIMEOUT=480)
  2. 清理容器 (docker (image|container|network) prune
  3. 再次运行撰写

  • 对我来说,这个问题确实是通过“docker container prune”解决的 (2认同)

plu*_*ium 14

一位同事解决了我的问题。

FROM node:16-alpine
ENV NODE_ENV="development"
WORKDIR /app
COPY package.json .
COPY package-lock.json .
ARG NODE_ENV
RUN apk add g++ make py3-pip
RUN npm install
RUN chown -R node /app/node_modules
RUN npm install -g ts-node nodemon
COPY . ./
ENV PORT 8000
EXPOSE $PORT
CMD ["ts-node", "./src/server.ts"]
Run Code Online (Sandbox Code Playgroud)

我添加了RUN chown -R node /app/node_modules并且它起作用了。他说这个问题是 Linux 特有的。

  • 您将此行添加到哪个文件? (2认同)

小智 9

Linux 只是在将文件作为可执行文件执行时比较挑剔(我知道这是多余的)。

因此,您使用命令创建一个文本文件(或二进制文件),但您希望运行该文件并让它在容器内执行某些作业,但您需要让环境知道它有权执行此操作。

chownchmod就可以了。

chmod方法

RUN chmod +x ./src/server.ts
Run Code Online (Sandbox Code Playgroud)

权限级别(+x针对所有人)赋予可执行文件在容器内执行此操作的权限。

  • 这解决了 Dockerfile 上的“RUN chmod +x install.sh”后的问题 (4认同)

Ali*_*Pop 7

就我而言,它是使用Docker Compose并启动容器,我只是重新创建了它们。

docker-compose down
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)


rsy*_*rsy 5

我在使用Alpine基础镜像创建Dockerfile时遇到了这个问题。在创建映像时,它将脚本复制到映像中,该脚本是在使用创建的映像运行容器时应执行的脚本。因为 Alpine 图像使用BusyBox,而 BusyBox 中没有,所以解决方案是使用两个入口点之一:shell

ENTRYPOINT ["/bin/sh","/my-script.sh"]

ENTRYPOINT ["/bin/bash","/my-script.sh"]
Run Code Online (Sandbox Code Playgroud)

使用CMD也能达到目的。