Dockerfile 不能 运行 使用 "docker-compose-up --build" 命令的容器

Dockerfile cannot run a container using "docker-compose-up --build" command

Docker文件不能运行使用“docker-compose-up --build”命令的容器

当我运行Docker文件使用“docker-compose up --build”命令时,输出找不到文件,容器不是运行宁.

Docker文件,docker-compose.yaml,目录和结果如下。

Docker版本:

\server>docker --version
Docker version 20.10.14, build a224086

Docker文件:

FROM openjdk:14-jdk-alpine3.10

RUN mkdir -p /app/workspace/config && \
    mkdir -p /app/workspace/lib && \
    mkdir -p /app/workspace/bin

WORKDIR /app/workspace
VOLUME /app/workspace

COPY ./bin ./bin
COPY ./config ./config
COPY ./lib ./lib

RUN chmod 774 /app/workspace/bin/*.sh

EXPOSE 6969

WORKDIR /app/workspace/bin

ENTRYPOINT ./startServer.sh

docker-compose.yaml:

version: '3'

services:
  server:
    container_name: cn-server
    build:
      context: ./server/
      dockerfile: Dockerfile
    ports:
      - "6969:6969"
    volumes:
      - ${SERVER_HOST_DIR}:/app/workspace
    networks:
      - backend

networks:
    backend:
        driver: bridge

目录: enter image description here

"docker-compose up --build"命令执行结果:

Building server
[+] Building 3.7s (13/13) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                               0.0s 
 => => transferring dockerfile: 425B                                                                                                                                                                                               0.0s 
 => [internal] load .dockerignore                                                                                                                                                                                                  0.0s 
 => => transferring context: 2B                                                                                                                                                                                                    0.0s 
 => [internal] load metadata for docker.io/library/openjdk:14-jdk-alpine3.10                                                                                                                                                       2.0s 
 => [internal] load build context                                                                                                                                                                                                  0.0s 
 => => transferring context: 239B                                                                                                                                                                                                  0.0s 
 => CACHED [1/8] FROM docker.io/library/openjdk:14-jdk-alpine3.10@sha256:b8082268ef46d44ec70fd5a64c71d445492941813ba9d68049be6e63a0da542f                                                                                          0.0s 
 => [2/8] RUN mkdir -p /app/workspace/config &&     mkdir -p /app/workspace/lib &&     mkdir -p /app/workspace/bin                                                                                                                 0.4s 
 => [3/8] WORKDIR /app/workspace                                                                                                                                                                                                   0.1s 
 => [4/8] COPY ./bin ./bin                                                                                                                                                                                                         0.1s 
 => [5/8] COPY ./config ./config                                                                                                                                                                                                   0.1s 
 => [6/8] COPY ./lib ./lib                                                                                                                                                                                                         0.1s 
 => [7/8] RUN chmod 774 /app/workspace/bin/*.sh                                                                                                                                                                                    0.5s 
 => [8/8] WORKDIR /app/workspace/bin                                                                                                                                                                                               0.1s 
 => exporting to image                                                                                                                                                                                                             0.2s 
 => => exporting layers                                                                                                                                                                                                            0.2s 
 => => writing image sha256:984554c9d7d9b3312fbe2dc76b4c7381e93cebca3a808ca16bd9e3777d42f919                                                                                                                                       0.0s 
 => => naming to docker.io/library/docker_cn-server                                                                                                                                                                               0.0s 
Creating cn-server ... done
Attaching to cn-server
cn-server        | /bin/sh: ./startServer.sh: not found
cn-server exited with code 127

另外bin、config、lib目录没有在host volume目录下创建,也没有文件。

请告诉我我哪里错了或者我用错了什么。

谢谢。

这里有两个明显的问题,都与 Docker 卷有关。

在你的 Docker 文件中,你切换到 WORKDIR /app/workspace 并在那里做一些工作,但随后在 Compose 设置中,你 bind-mount 一个主机目录覆盖了整个 /app/workspace.这会导致 Docker 文件中的所有工作丢失,并用来自主机的不可预测的内容替换图像中的代码。在 docker-compose.yml 文件中,您应该删除 volumes: 块。您应该能够将显示的内容减少到

version: '3.8'
services:
  server:
    build: ./server
    ports:
      - '6969:6969'

第二个问题出在Docker文件本身。您很早就声明了 VOLUME /app/workspace。不过,这是不必要的,其最明显的影响是导致该目录中的后续 RUN 命令无效。所以特别是你的 RUN chmod ... 命令没有发生。删除 VOLUME 行可以帮助解决这个问题。 (您也不需要 RUN mkdir 您将要 COPY 的目录到图像中。)

FROM openjdk:14-jdk-alpine3.10

WORKDIR /app/workspace
COPY ./bin ./bin
COPY ./config ./config
COPY ./lib ./lib
RUN chmod 0755 bin/*.sh

EXPOSE 6969
WORKDIR /app/workspace/bin
CMD ["./startServer.sh"]

根据 startServer.sh 文件的内容,还有其他潜在问题。我希望这是一个 shell 脚本,它的第一行是一个“shebang”行,#!/bin/sh。如果它明确命名 GNU Bash 或另一个 shell,那将不会出现在 Alpine-based 图像中。如果您在 Windows-based 系统上工作并且文件有 DOS 行结尾,这也会导致错误。