启动Docker容器失败.““无法创建填充程序责任:OCI运行时创建失败:runc创建失败”

sbdsn5lh  于 2022-12-03  发布在  Docker
关注(0)|答案(3)|浏览(2783)

我是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,所以它们是:
docker-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:

我很想说“我发现了一些线索,并尝试了他们推荐的”,但 * 说实话 * 我真的不明白他们,当我读他们还没有。以下线索可能是相关的,但他们读起来像拉丁语给我。
"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
比如,我从阅读错误消息中猜测,我需要打开某种写权限,因为错误消息以“read-only file system:未知”。可悲的是,这就是我所能贡献的。

bxfogqkk

bxfogqkk1#

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

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特有的。

b4wnujal

b4wnujal2#

相当初级的好先生(夏洛克)......
Linux只是挑剔,当谈到执行文件作为一个可执行文件(冗余,我知道)。
因此,您创建了一个带有命令的文本文件(或二进制文件),但您希望运行该文件并让它在容器中执行某些作业,但您需要让环境知道它具有这样做的权限。
chown或chmod就可以了。
--chmod--方法运行chmod +x ./源/服务器.ts
权限级别(+x表示全部)授予可执行文件在容器中执行此操作的权限。

chhqkbe1

chhqkbe13#

在我的例子中,docker compose超时了,并且损坏了容器。我只需要:
1.增加编写超时(COMPOSE_HTTP_TIMEOUT=480)
1.清洁容器(码头(图像|集装箱|网络)清理
1.再次运行编写

相关问题