虽然我们当前使用的特定基本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的第三行
那我应该怎么做呢?
答案 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/*