找不到 Docker Debian nc 命令

dat*_*den 8 docker docker-entrypoint

当我Debian从 docker-compose构建我的图像时,使用命令$ docker-compose -f docker-compose-dev.yml build web,如下所示:

docker-compose-fev.yml

services:

  web:
    build:
      context: ./services/web
      dockerfile: Dockerfile-dev
    volumes:
      - './services/web:/usr/src/app'  
    ports:
      - 5001:5000
    environment:
      - FLASK_ENV=development
      - APP_SETTINGS=project.config.DevelopmentConfig
      - DATABASE_URL=postgres://postgres:postgres@web-db:5432/web_dev 
      - DATABASE_TEST_URL=postgres://postgres:postgres@web-db:5432/web_test
      - SECRET_KEY=my_precious
    depends_on:  
      - web-db
      - redis
Run Code Online (Sandbox Code Playgroud)

好像它似乎成功构建了所有包,我得到:

web_1| /usr/src/app/entrypoint.sh: 5: /usr/src/app/entrypoint.sh: nc: not found
Run Code Online (Sandbox Code Playgroud)

如果我更改#!/bin/sh#!/bin/bash,则错误日志更改:

web_1| /usr/src/app/entrypoint.sh: line 5: nc: command not found
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

FROM python:3.7-slim-buster

RUN apt-get update && apt-get -y dist-upgrade
RUN apt-get -y install build-essential libssl-dev libffi-dev libblas3 libc6 liblapack3 gcc python3-dev python3-pip cython3
RUN apt-get -y install python3-numpy python3-scipy 

# set working directory
WORKDIR /usr/src/app

COPY ./requirements.txt /usr/src/app/requirements.txt 
RUN pip3 install -r requirements.txt

# add entrypoint.sh
COPY ./entrypoint.sh /usr/src/app/entrypoint.sh

RUN chmod +x /usr/src/app/entrypoint.sh

# add app
COPY . /usr/src/app

# run server
CMD ["/usr/src/app/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

入口点.sh

#!/bin/sh

echo "Waiting for postgres..."

while ! nc -z web-db 5432; do
  sleep 0.1
done

rm -rf celery_logs/*

echo "PostgreSQL started"

python manage.py run -h 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

注意:这个入口点配置曾经使用过Alpine,现在已经改为Debian.

我错过了什么?

Anu*_*ndo 11

更新 Dockerfile 并附加,

RUN apt install -y netcat
Run Code Online (Sandbox Code Playgroud)

应该是这样的

FROM python:3.7-slim-buster


RUN apt-get update && apt-get -y dist-upgrade
RUN apt-get -y install build-essential libssl-dev libffi-dev libblas3 libc6 liblapack3 gcc python3-dev python3-pip cython3
RUN apt-get -y install python3-numpy python3-scipy 
RUN apt install -y netcat
Run Code Online (Sandbox Code Playgroud)

  • 像这样拥有多个 RUN 行并不是真正的最佳实践 (2认同)
  • 如果“apt-get update”被缓存,但它已经存在一周了,“apt-get install”行可能会失败(Debian 和 Ubuntu 都会相当积极地从其存储库中清除非当前软件包)。为了避免这种情况,在同一个“RUN”命令中使用“apt-get update && apt-get install”非常重要。(“附加层”本身并不是一个真正重要的问题。) (2认同)
  • @Data https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#run (2认同)
  • @cricket_007 最后一个“RUN apt-get”之后的“rm -rf /var/lib/apt/lists/*”? (2认同)