首页 > 解决方案 > 错误:服务“web”构建失败:命令“/bin/sh -c apk add --no-cache gcc musl-dev linux-headers”返回非零代码:3

问题描述

我只是按照docker-compose官方文档的demo

虚拟机:VMware Workstation 15 Player 操作系统:Centos7

码头工人-compose.yml

version: '3'
 services:
   web:
       build: .
       ports:
        - "5000:5000"
   redis:
       image: "redis:alpine"

Dockerfile:

ROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

运行推荐:

docker-compose up

日志和错误消息

Building web
Step 1/9 : FROM python:3.7-alpine
 ---> 7fbc871584eb
Step 2/9 : WORKDIR /code
 ---> Using cache
 ---> c20780a4b2d4
Step 3/9 : ENV FLASK_APP app.py
 ---> Using cache
 ---> 973cc407ca91
Step 4/9 : ENV FLASK_RUN_HOST 0.0.0.0
 ---> Using cache
 ---> 23891144700d
Step 5/9 : RUN apk add --no-cache gcc musl-dev linux-headers
 ---> [Warning] IPv4 forwarding is disabled. Networking will not work.
 ---> Running in 7b29f4df9539
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
WARNING: Ignoring http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz: temporary error (try again later)
WARNING: Ignoring http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz: temporary error (try again later)
ERROR: unsatisfiable constraints:
  gcc (missing):
    required by: world[gcc]
  linux-headers (missing):
    required by: world[linux-headers]
  musl-dev (missing):
    required by: world[musl-dev]
ERROR: Service 'web' failed to build: The command '/bin/sh -c apk add --no-cache gcc musl-dev linux-headers' returned a non-zero code: 3

谁能帮我?

标签: dockerdocker-compose

解决方案


您收到错误的根本原因是 Docker 映像上未安装(安装失败)GCC。确保您有互联网连接来安装这些库。

从您收到的警告中

---> [Warning] IPv4 forwarding is disabled. Networking will not work.

似乎 Docker 容器没有互联网连接,您必须IPv4 forwarding使用以下命令启用

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl -p /etc/sysctl.conf

更多信息可以在这里找到


推荐阅读