Dockerfile以及用于apt-get

时间:2019-08-27 21:11:19

标签: docker dockerfile

虽然我们当前使用的特定基本linux docker映像使我不知所措,但我遇到的问题是我需要包括Postgresql Client。

apt-get更新允许我安装它,但是我发现它只有版本9,我需要10来匹配我的Postgres数据库。

如果docker正在运行并且我使用exec bash访问它,则可以运行以下命令来安装版本10 ...

echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" >>  /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get -y install postgresql-client-10

然后我开始着手将这些添加到我的Dockerfile中,以便将其自动包含在内,结果是...

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 -y install postgresql-client-10

当Visual Studio(Mac 2019)生成docker时,它将完全忽略这一点。当我从命令行构建它时,输出表明它已经按照预期完成了,在Docker Cloud构建它的过程中,我得到了错误信息……

Step 17/24 : COPY --from=publish /app .
---> 091e71bd17c0
Step 18/24 : RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" >> /etc/apt/sources.list.d/pgdg.list
---> Running in 8582e2dba910
/bin/sh: can't create /etc/apt/sources.list.d/pgdg.list: nonexistent directory
Removing intermediate container 8582e2dba910
The command '/bin/sh -c echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" >> /etc/apt/sources.list.d/pgdg.list' returned a non-zero code: 1

请注意有关无法创建pgdg.list的第三行

那我应该怎么做呢?

1 个答案:

答案 0 :(得分:0)

您使用其他Dockerfile语句的方法是正确的。但是,目前尚不清楚如何扩展先前的容器映像以包括这些容器。

通常,您会遇到以下形式的东西:

FROM my-original-image:its-version
RUN ...
RUN ...
RUN apt-get update
RUN apt-get -y install postgresql-client-10

这种方法会将postgresql-client-10添加到my-original-image:its-version中安装的任何内容。

另一种方法是从使用my-original-image:its-version的基础开始,然后安装postgresql-client-10而不是以前的版本。您的选择。

如果my-original-image是使用以下方法创建的:

FROM some-base
RUN apt update && apt install -y postgresql-client-9

您可以:

FROM some-base
RUN apt update && apt install -y postgresql-client-10

注意事项:您还必须复制其他依赖项的安装。

更新

请参阅有关对Postgres here进行Docker化的说明。 Postgres PGP密钥可能已从图像中删除,并导致错误。

FROM debian:stretch-slim

RUN apt-get update && apt-get install -y \
        gnupg2 \
        wget \
    && apt-key adv \
        --keyserver hkp://p80.pool.sks-keyservers.net:80 \
        --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 \
    && echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main"  \
        >> /etc/apt/sources.list.d/pgdg.list \
    && wget \
        --quiet \
        --output-document - \
        https://www.postgresql.org/media/keys/ACCC4CF8.asc \
        | apt-key add - \
    && apt-get update \
    && apt-get install -y \
        postgresql-client-10 \
    && rm -rf /var/lib/apt/lists/*