Docker libpq5依赖中的PHP和Postgresql问题

时间:2019-02-09 22:36:41

标签: php postgresql docker

我正在尝试通过以下示例使用docker创建一个PHP,Postgresql开发环境:https://hk.saowen.com/a/67350ecfcbbe9dd8befa286a4257d5f91565a124ba3c7776c2b1c37f8b638df0。但是,当docker尝试安装postgresql-client-9.6时,我遇到了相关性问题。我收到的错误是postgresql-client-9.6 : Depends: libpq5 (>= 9.6.11) but 9.6.10-0+deb9u1 is to be installed

本教程尝试使用php:7.0-apachepostgres:9.6。我曾尝试更改PHP和Postgresql的版本,但是却收到了相同类型的错误,但依赖项编号不同。看来libpq5已过时,而且我不知道如何获得最新版本。

我正在使用的Dockerfile是

FROM php:7.0-apache
RUN apt-get update && \
    apt-get install -y libpq-dev gnupg && docker-php-ext-install pdo pdo_pgsql
RUN apt-get install -y wget
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main 9.6" > /etc/apt/sources.list.d/pgdg.list
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
   apt-key add -
RUN apt-get update
RUN apt-get install -y postgresql-client-9.6
COPY ./wait-for-postgres.sh wait-for-postgres.sh
RUN chmod +x wait-for-postgres.sh
COPY src/ /var/www/html

和docker-compose.yml文件是

version: '3'
volumes:
  psql-data:

services:
  php-app:
    build: ./app
    image: myapp
    container_name: php-app
    env_file:
      - ./env
    depends_on:
      - postgres
    command: ["./wait-for-postgres.sh", "apache2-foreground"]
    ports:
      - 80:80
    networks:
      app-env:

  postgres:
    image: postgres:9.6
    container_name: postgres
    env_file:
      - ./env
    volumes:
      - ./postgres/script/:/docker-entrypoint-initdb.d
      - psql-data:/var/lib/posgresql/data
    networks:
      app-env:

networks:
  app-env:

此博客文章准确地描述了问题,但是该解决方案对我不起作用:https://support.circleci.com/hc/en-us/articles/360003953613-Error-Installing-postgresql-client-9-6-on-Docker。预先感谢您提供的任何建议。

2 个答案:

答案 0 :(得分:0)

我有类似的情况,我需要在现有的Docker映像上安装postgresql-client-10。相反,我在postgres:10图像之上构建了所​​需的图像。 希望这对您也有帮助。

答案 1 :(得分:0)

我自己也遇到了同样的问题。原来,我在apt中添加了错误的发行版存储库。我的映像基于Debian 9(代号拉伸),但是我添加了仓库或Debian 8(代号杰西):

我有这个(我的版本不对):

FROM ruby:2.5.0
RUN wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add - && \
      echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" >> /etc/apt/sources.list.d/pgdg.list

应该是这个(s / jessie / stretch /):

FROM ruby:2.5.0
RUN wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add - && \
      echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" >> /etc/apt/sources.list.d/pgdg.list

我猜你的问题是php:7.0-apache映像不是基于Ubuntu 14.04(代号Trusty Tahr)的,但这就是您要回购的目的。

您可以通过运行以下命令检查版本:

docker run php:7.0-apache cat /etc/issue

我只是这样做了,看起来该图像也基于Debian Stretch。因此,根据您的情况,只需将Dockerfile更改为此:

FROM php:7.0-apache
RUN apt-get update && \
    apt-get install -y libpq-dev gnupg && docker-php-ext-install pdo pdo_pgsql
RUN apt-get install -y wget
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgdg.list
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
   apt-key add -
RUN apt-get update
RUN apt-get install -y postgresql-client-9.6
COPY ./wait-for-postgres.sh wait-for-postgres.sh
RUN chmod +x wait-for-postgres.sh
COPY src/ /var/www/html