我正在尝试将云数据从Docker容器中传输到Postgres数据库。我使用docker-compose
构建了该容器,其中包含以下Dockerfile片段:
FROM postgres:14
...
RUN apt-get update \
&& pip3 install awscli
RUN aws --version
RUN apt-get -y install postgresql-plpython3-14
# symlinks for extension
RUN ln -s /usr/lib/postgresql/plpython3.so /usr/local/lib/postgresql/plpython3.so \
&& ln -s /usr/share/postgresql/extension/plpython3u.control /usr/local/share/postgresql/extension/plpython3u.control \
&& ln -s /usr/share/postgresql/extension/plpython3u--1.0.sql /usr/local/share/postgresql/extension/plpython3u--1.0.sql \
&& ln -s /usr/share/postgresql/extension/plpython3u--unpackaged--1.0.sql /usr/local/share/postgresql/extension/plpython3u--unpackaged--1.0.sql
...
我接着说:
$ docker exec -it <container> psql -U postgres -W
下面是psql:
postgres=# CREATE EXTENSION plpython3u;
ERROR:extension "plpython3u" already exists
postgres=# DROP EXTENSION plpython3u;
ERROR: extension "plpython3u" does not exist
很明显有些事情不对劲,但我不知道是什么。
我不得不重新构建容器来添加符号链接,我使用了docker-compose build --no-cache
。我尝试搜索类似的问题,但我所找到的都是添加符号链接的建议,我已经这样做了。
谢谢。
1条答案
按热度按时间lymnna711#
您在Dockerfile中执行了一些不必要的步骤;你不需要去摆弄这些符号链接,映像中的Postgres安装在
/usr
中,而不是/usr/local
中。如果我将Docker文件简化为:
然后构建并运行映像,我看到: