Docker file命令运行apt从错误的存储库获取更新

Docker file命令运行apt从错误的存储库获取更新,docker,ubuntu-16.04,Docker,Ubuntu 16.04,我无法安装postgresql 9.5这是我在docker文件中的关键点 Dockerfile行 RUN apt-get update && apt-get install -qq -y build-essential libpq-dev postgresql-client-9.5 --fix-missing --no-install-recommends 它运行下面的命令 remote: E: Package 'postgresql-client-9.5' has no in

我无法安装postgresql 9.5这是我在docker文件中的关键点 Dockerfile行

RUN apt-get update && apt-get install -qq -y build-essential libpq-dev postgresql-client-9.5 --fix-missing --no-install-recommends
它运行下面的命令

remote: E: Package 'postgresql-client-9.5' has no installation candidate
remote:
 The command '/bin/sh -c apt-get update && apt-get install -qq 
-y build-essential libpq-dev postgresql-client-9.5 --fix-missing 
--no-install-recommends' returned a non-zero code: 100
当我使用ubuntu xenial时,它似乎试图从debian存储库获取更新。可能是因为我首先为debian安装了错误的docker版本,然后用

sudo apt-get remove docker docker-engine docker.io
sudo rm -rf /var/lib/docker
在此之后,我为我的ubuntu xenial发行版安装了docker。我不明白为什么当我运行docker文件时,它仍然会更新软件包并尝试安装适用于debian的软件包,而我没有任何与debian相关的东西

已安装的docker版本为

Docker version 17.05.0-ce, build 89658be

以下是运行apt get update时的代码:

remote:  ---> Running in b8d8101adf4a
remote:  ---> f9286d1e85d1
remote: Removing intermediate container b8d8101adf4a
remote: Step 3/11 : RUN apt-get update && apt-get install -qq -y build-essential libpq-dev postgresql-client-9.5 mysql-client-5.7 --fix-missing --no-install-recommends
remote:  ---> Running in 9bda34235687
remote: Ign:1 http://deb.debian.org/debian stretch InRelease
remote: Get:2 http://deb.debian.org/debian stretch-updates InRelease [91.0 kB]
remote: Get:3 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]
remote: Get:4 http://deb.debian.org/debian stretch Release [118 kB]
remote: Get:5 http://deb.debian.org/debian stretch-updates/main amd64 Packages [12.1 kB]
remote: Get:6 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [440 kB]
remote: Get:7 http://deb.debian.org/debian stretch Release.gpg [2434 B]
remote: Get:8 http://deb.debian.org/debian stretch/main amd64 Packages [9530 kB]
remote: Fetched 10.3 MB in 13s (789 kB/s)
remote: Reading package lists...
Dockerfile:

FROM python:2.7
MAINTAINER Makkasi <makkasi@abv.bg>

RUN apt-get update && apt-get install -qq -y build-essential libpq-dev postgresql-client-9.5 --fix-missing --no-install-recommends

ENV INSTALL_PATH /project1
RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

VOLUME ["static"]
CMD gunicorn -b 0.0.0.0:8000 "project1.app:create_app()"

我认为这是一个postgresql版本的问题。 如果您使用的是
stretch
buster
(buster实际上是从stretch服务器更新的),repo中的版本是postgresql-client-9.6,而不是9.5


试试这个,我们就知道了。

我认为这是一个postgresql版本的问题。 如果您使用的是
stretch
buster
(buster实际上是从stretch服务器更新的),repo中的版本是postgresql-client-9.6,而不是9.5

试试这个,我们就知道了

当我使用ubuntu xenial时,它似乎试图从debian存储库获取更新

用于生成图像的命令将基于图像的先前状态在容器中运行。它们不依赖于正在运行的主机。结果是相同的映像可以在不同的docker主机上构建,结果几乎相同(外部依赖项和时间戳是正常的例外)。如果按照从
from
行中提供的Dockerfile的路径进行操作,则会得到:

  • 来自python:2.7的
    :和
  • 来自buildpack deps:stretch
    :和
  • 来自buildpack deps的
    :拉伸scm
    :和
  • 来自buildpack deps:stretch curl
    :和
  • 来自debian:stretch的
    :和
您还可以基于基本映像运行容器,并使用标准包管理器工具查询包含哪些版本的包(当您的映像没有Dockerfile时,这尤其有用):

当我使用ubuntu xenial时,它似乎试图从debian存储库获取更新

用于生成图像的命令将基于图像的先前状态在容器中运行。它们不依赖于正在运行的主机。结果是相同的映像可以在不同的docker主机上构建,结果几乎相同(外部依赖项和时间戳是正常的例外)。如果按照从
from
行中提供的Dockerfile的路径进行操作,则会得到:

  • 来自python:2.7的
    :和
  • 来自buildpack deps:stretch
    :和
  • 来自buildpack deps的
    :拉伸scm
    :和
  • 来自buildpack deps:stretch curl
    :和
  • 来自debian:stretch的
    :和
您还可以基于基本映像运行容器,并使用标准包管理器工具查询包含哪些版本的包(当您的映像没有Dockerfile时,这尤其有用):


请在问题中包含完整的Dockerfile。生成映像期间使用的repo取决于所选的基本映像,而不是主机。@BMitch在Dockerfile中没有特定于postgress的内容。在docker compose中有postgres 9.5。如果我理解正确,repostiroty类型由docker compose文件中的第一个图像确定,即postgres。从那里开始,存储库取决于postgres Dockerfile。对吗?请在您的问题中包含完整的Dockerfile。@BMitch我已经添加了其余部分。我很抱歉,但我对这一点还不熟悉,我认为Dockerfile的其余部分并不重要。这只是gunicorn命令。文件中没有其他内容。docker文件和docker compose文件中都没有。请在问题中包含完整的docker文件。生成映像期间使用的repo取决于所选的基本映像,而不是主机。@BMitch在Dockerfile中没有特定于postgress的内容。在docker compose中有postgres 9.5。如果我理解正确,repostiroty类型由docker compose文件中的第一个图像确定,即postgres。从那里开始,存储库取决于postgres Dockerfile。对吗?请在您的问题中包含完整的Dockerfile。@BMitch我已经添加了其余部分。我很抱歉,但我对这一点还不熟悉,我认为Dockerfile的其余部分并不重要。这只是gunicorn命令。文件中没有其他内容。Dockerfile和docker compose文件中都没有。谢谢。版本9.6起作用了,但我不明白你是如何找到允许的版本的。例如,如果docker compose中的第一个映像是postgress,而第二个映像是mysql,那么如何找到mysql的允许/可访问版本。我的问题下面还有一些有用的评论。它帮助我了解了正在发生的事情。我建议你把它添加到你的答案中。谢谢。如果我的评论解决了您的问题,请将其标记为已解决。避免这些版本问题的唯一方法是拥有所有内容的最新版本,或者使用debian 9、8、7的版本创建回购。。。如果您想安装的程序是旧的,最好指定SO和程序的版本。谢谢。版本9.6起作用了,但我不明白你是如何找到允许的版本的。例如,如果docker compose中的第一个映像是postgress,而第二个映像是mysql,那么如何找到mysql的允许/可访问版本。我的问题下面还有一些有用的评论。它帮助我了解了正在发生的事情。我建议你去
postgres:
  image: postgres:9.5
  environment:
    POSTGRES_USER: makkasi
    POSTGRES_PASSWORD: somepassword
  ports:
    - '5432:5432'
  volumes:
    - ~/.docker-volumes/project1/postgresql/data:/var/lib/postgresql/data


redis:
  image: redis:2.8.22
  ports:
    - '6379:6379'
  volumes:
    - ~/.docker-volumes/project1/redis/data:/var/lib/redis/data

project1:
  build: .
  command: gunicorn -b 0.0.0.0:8000 --reload --access-logfile - "project1.app:create_app()"
  environment:
    PYTHONUNBUFFERED: true
  links:
    - postgres
    - redis
  volumes:
    - .:/project1
  ports:
    - '8000:8000'
$ docker run -it --rm python:2.7 /bin/bash

root@ea64878fc27f:/# cat /etc/debian_version
8.7

root@ea64878fc27f:/# apt-get update
Get:1 http://security.debian.org jessie/updates InRelease [94.4 kB]
Ign http://deb.debian.org jessie InRelease                   
Get:2 http://deb.debian.org jessie-updates InRelease [145 kB]              
Get:3 http://deb.debian.org jessie Release.gpg [2434 B]                            
Get:4 http://deb.debian.org jessie Release [148 kB]               
Get:5 http://security.debian.org jessie/updates/main amd64 Packages [623 kB]
Get:6 http://deb.debian.org jessie-updates/main amd64 Packages [23.0 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9064 kB]           
Fetched 10.1 MB in 9s (1058 kB/s)                                                                                    
Reading package lists... Done

root@ea64878fc27f:/# apt-cache search postgresql-client
postgresql-client-9.4 - front-end programs for PostgreSQL 9.4
postgresql-client - front-end programs for PostgreSQL (supported version)
postgresql-client-common - manager for multiple PostgreSQL client versions

root@ea64878fc27f:/# apt-cache madison postgresql-client
postgresql-client | 9.4+165+deb8u3 | http://deb.debian.org/debian/ jessie/main amd64 Packages
postgresql-client | 9.4+165+deb8u3 | http://security.debian.org/ jessie/updates/main amd64 Packages