我是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.yml
和docker-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:未知”。可悲的是,这就是我所能贡献的。
3条答案
按热度按时间bxfogqkk1#
一个同事解决了我的问题。
我添加了
RUN chown -R node /app/node_modules
,它起作用了。他说这个问题是Linux特有的。b4wnujal2#
相当初级的好先生(夏洛克)......
Linux只是挑剔,当谈到执行文件作为一个可执行文件(冗余,我知道)。
因此,您创建了一个带有命令的文本文件(或二进制文件),但您希望运行该文件并让它在容器中执行某些作业,但您需要让环境知道它具有这样做的权限。
chown或chmod就可以了。
--chmod--方法运行chmod +x ./源/服务器.ts
权限级别(+x表示全部)授予可执行文件在容器中执行此操作的权限。
chhqkbe13#
在我的例子中,docker compose超时了,并且损坏了容器。我只需要:
1.增加编写超时(COMPOSE_HTTP_TIMEOUT=480)
1.清洁容器(码头(图像|集装箱|网络)清理
1.再次运行编写