启动 docker 容器失败。 “创建垫片任务失败:OCI 运行时创建失败:runc 创建失败”

我是 Ubuntu 的新手,也是 Docker 的新手。我正在运行在解释如何启动项目时给我的命令。我想启动我的 Docker 容器,但它们因错误而失败。

一些注意事项:

  • 这是一台新的 Ubuntu 笔记本电脑。
  • 我添加了 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.

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

码头工人-compse.yml:

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

和 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:

我想说“我找到了一些线程并尝试了他们推荐的内容”但是 to be honest 当我阅读它们时我还没有真正理解它们。以下线程可能是相关的,但对我来说它们读起来像拉丁语。

"Error response from daemon: failed to create shim: OCI runtime create failed" error on Windows machine

Cannot start service api: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "python manage.py runserver

Cannot start service app: OCI runtime create failed: container_linux.go:349

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

stack overflow Failure starting docker container. "failed to create shim task: OCI runtime create failed: runc create failed"
原文答案
author avatar

接受的答案

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

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 chown -R node /app/node_modules 并且它起作用了。他说这个问题是 Linux 特有的。


答案:

作者头像

相当初级的好先生(夏洛克)......

Linux 在将文件作为可执行文件执行时很挑剔(我知道是冗余的)。

因此,您使用命令创建了一个文本文件(或二进制文件),但您想运行该文件并让它在容器中执行一些工作,但您需要让环境知道它有权这样做。

chown 或 chmod 可以解决问题。

--chmod-- 接近 RUN chmod +x ./src/server.ts

权限级别(全部为 +x)赋予可执行文件在容器内执行此操作的权限。

作者头像

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

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

相关问题