【问题标题】:Docker Debian nc command not found未找到 Docker Debian nc 命令
【发布时间】:2020-01-14 02:29:41
【问题描述】:

当我从 docker-compose 构建我的 Debian 图像时,使用命令 $ 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

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

web_1| /usr/src/app/entrypoint.sh: 5: /usr/src/app/entrypoint.sh: nc: not found

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

web_1| /usr/src/app/entrypoint.sh: line 5: nc: command not found

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"]

入口点.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

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

我错过了什么?

【问题讨论】:

  • nc: command not found 是实际错误
  • 是的。我正在尝试安装apt-get install -y netcat。仍在建设中。
  • 顺便说一句,这张图片效果很好。 github.com/tiangolo/meinheld-gunicorn-flask-docker
  • numpy和scipy应该用pip安装,python3已经有pip,所以不需要python3-pip
  • 您的意思是在requirements.txt 中,还是在Dockerfile 中?

标签: docker docker-entrypoint


【解决方案1】:

更新 Dockerfile 并追加,

RUN apt install -y netcat

应该是这样的,

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 行并不是真正的最佳实践
  • 会的,是的。另外,rm apt 缓存
  • 如果 apt-get update 被缓存但它是一周前的,apt-get install 行可能会失败(Debian 和 Ubuntu 都相当积极地从其存储库中清除非当前软件包)。 apt-get update && apt-get install 在同一个 RUN 命令中避免这种情况很重要。 (“附加层”本身并不是一个真正重要的问题。)
  • @cricket_007 rm -rf /var/lib/apt/lists/* 在最后一个 RUN apt-get 之后?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多