0
点赞
收藏
分享

微信扫一扫

Dockerfile ERROR: failed to solve: 8090

weipeng2k 07-27 09:00 阅读 35

您遇到的 ERROR: failed to solve: 8090: ... 是由于 Dockerfile 中的 FROM 8090 语法错误导致的。以下是详细分析和解决方案:

核心错误原因

误解 FROM 指令的作用

  • FROM 的作用:必须指向一个有效的 Docker 基础镜像(如 alpine, ubuntu, 或自定义镜像),而非端口号或其他数值。
  • 您的代码问题FROM 8090 试图将数字 8090 作为镜像名,但 Docker Hub 中不存在名为 8090 的镜像,因此报错 “repository does not exist”。

常见误解澄清

错误写法 正确做法 说明
FROM 8090 EXPOSE 8090 如果目的是暴露端口,应使用 EXPOSE 指令
FROM 8090 ENV PORT=8090 如果需设置环境变量存储端口号
FROM stakater/java8-alpine ✅ 已正确使用 第一行的 FROM 是正确的基础镜像声明

修复方案

方案 1:删除错误的 FROM 指令

如果不需要切换基础镜像,直接删除第3行:

FROM stakater/java8-alpine
COPY ./docker-demo.jar /tmp/app2.jar
# 删除错误的 FROM 8090
ENTRYPOINT java -jar /tmp/app2.jar

方案 2:如果目标是暴露端口

FROM 8090 改为 EXPOSE 8090

FROM stakater/java8-alpine
COPY ./docker-demo.jar /tmp/app2.jar
EXPOSE 8090          # 声明容器对外开放的端口
ENTRYPOINT java -jar /tmp/app2.jar

注意EXPOSE 仅声明端口,运行时仍需通过 -p 参数映射主机端口(如 docker run -p 8090:8090 your-image)。

方案 3:如果确实需要多阶段构建

若意图使用多阶段构建(Multi-Stage Builds),需明确指定新阶段的镜像名:

# 第一阶段:构建阶段
FROM stakater/java8-alpine AS builder
COPY ./docker-demo.jar /tmp/app2.jar

# 第二阶段:运行阶段(示例)
FROM alpine:latest      # 必须指定有效镜像名
WORKDIR /app
COPY --from=builder /tmp/app2.jar .
ENTRYPOINT java -jar /app/app2.jar

完整修正示例

假设您只需运行 Java 应用并暴露端口 8090,修正后的 Dockerfile 如下:

FROM stakater/java8-alpine
COPY ./docker-demo.jar /tmp/app2.jar
EXPOSE 8090          # 声明暴露的端口
ENTRYPOINT java -jar /tmp/app2.jar

关键注意事项

  1. FROM 必须指向有效镜像:如 alpine, ubuntu, 或已发布的自定义镜像。
  2. 端口管理:暴露端口用 EXPOSE,映射主机端口用 -p 参数。
  3. 多阶段构建:若需多阶段,每个 FROM 必须独立声明阶段(如 FROM ... AS builder)。

验证步骤

  1. 构建镜像
    docker build -t my-java-app .
    
  2. 运行容器并映射端口
    docker run -p 8090:8090 my-java-app
    
  3. 检查日志:确保应用正常启动并监听 8090 端口。

通过以上修改,应能解决 FROM 8090 导致的镜像解析错误。

举报

相关推荐

0 条评论