docker - 为什么当ls报告确实存在时,Docker为什么报告入口点文件不存在?

标签 docker docker-compose ls docker-entrypoint

我正在使用Docker v19。我在Web / Dockerfile的末尾有这个...

FROM python:3.7-slim
  
RUN apt-get update && apt-get install

RUN apt-get install -y dos2unix
RUN apt-get install -y libmariadb-dev-compat libmariadb-dev
RUN apt-get update \
    && apt-get install -y --no-install-recommends gcc \
    && rm -rf /var/lib/apt/lists/*

RUN python -m pip install --upgrade pip

WORKDIR /app/

COPY requirements.txt requirements.txt
COPY entrypoint.sh entrypoint.sh
RUN tr -d '\r' < entrypoint.sh > /app/entrypoint2.sh
RUN ls /app/entrypoint2.sh
RUN ls /app/
RUN python -m pip install -r requirements.txt

RUN ls /app/entrypoint.sh
RUN dos2unix /app/entrypoint.sh
RUN ls /app/entrypoint.sh

RUN chmod +x /app/*.sh
RUN ls ./
ENTRYPOINT ["./entrypoint2.sh"]
但是,当我运行“docker-compose up”(引用了上面的内容)时,找不到“entrypoiet”文件,这令人困惑,因为上面的行(“ls ./”)表明它存在...
Step 14/19 : RUN ls /app/entrypoint.sh
 ---> Running in db8c11ce3fad
/app/entrypoint.sh
Removing intermediate container db8c11ce3fad
 ---> c23e69de2a86
Step 15/19 : RUN dos2unix /app/entrypoint.sh
 ---> Running in 9e5bbd1c0b9a
dos2unix: converting file /app/entrypoint.sh to Unix format...
Removing intermediate container 9e5bbd1c0b9a
 ---> 32a069690845
Step 16/19 : RUN ls /app/entrypoint.sh
 ---> Running in 8a53e70f219b
/app/entrypoint.sh
Removing intermediate container 8a53e70f219b
 ---> 5444676f45fb
Step 17/19 : RUN chmod +x /app/*.sh
 ---> Running in 5a6b295217c8
Removing intermediate container 5a6b295217c8
 ---> 8b5bfa4fd75a
Step 18/19 : RUN ls ./
 ---> Running in 9df3acb7deb7
entrypoint.sh
entrypoint2.sh
requirements.txt
Removing intermediate container 9df3acb7deb7
 ---> 009f8bbe18c8
Step 19/19 : ENTRYPOINT ["./entrypoint2.sh"]
 ---> Running in 41a7e28641a7
Removing intermediate container 41a7e28641a7
 ---> 34a7d4fceb8b

Successfully built 34a7d4fceb8b
Successfully tagged maps_web:latest
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.

...
Creating maps_web_1   ... error

ERROR: for maps_web_1  Cannot start service web: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"./entrypoint2.sh\": stat ./entrypoint2.sh: no such file or directory": unknown
我如何告诉Docker如何引用该入口点文件?包含以上内容的docker-compose.yml文件部分如下
  web:
    restart: always
    build: ./web
    ports:           # to access the container from outside
      - "8000:8000"
    env_file: .env
    environment:
      DEBUG: 'true'
    command: /usr/local/bin/gunicorn directory.wsgi:application --reload -w 2 -b :8000
    volumes:
    - ./web/:/app
    depends_on:
      - mysql

最佳答案

基于提供的Dockerfile和docker-compose文件,您正在执行以下操作

  • 将文件(入口点和要求)复制到/app
  • 安装所需的软件包
  • 从覆盖导致问题的/app内容的卷开始启动容器。

  • 要解决此问题,您必须执行以下任一操作
  • 将所有数据从./web复制到Docker镜像并删除卷

  • Dockerfile:添加以下行
    WORKDIR /app/
    COPY ./web /app
    
    
    Docker-compose:删除以下几行
       volumes:
        - ./web/:/app
    
  • 第二个选项是更改入口点的路径,使其与
  • 卷不冲突

    Docker文件
    RUN tr -d '\r' < entrypoint.sh > /entrypoint2.sh
    RUN chmod +x /entrypoint2.sh
    ENTRYPOINT ["./entrypoint2.sh"]
    

    关于docker - 为什么当ls报告确实存在时,Docker为什么报告入口点文件不存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64083439/

    相关文章:

    docker - 尝试使用带有自定义conf.d的docker-compose运行nginx时出错

    linux - 为什么 `cd ..` 反射(reflect)符号链接(symbolic link)遍历,而 `ls ..` 不反射(reflect)?

    bash - 如何查看所有(包括隐藏)子目录

    mysql - Kubernetes:mysql pod 无法打开日志文件/var/log/pods/

    docker - 如何通过更新 docker 注册表服务器来修复客户端上的不安全注册表错误

    macos - Docker 镜像似乎缺少层

    docker - docker build 上的 yarn 警告

    docker - 无法从主机连接到 dockerized Vue CLI 服务

    java - Docker depends_on 命令不工作

    linux - 如何使用通配符ls子目录中的所有文件?