我正在为连接到同一个docker网络内的postgres容器的应用程序制作Dockerfile。为了填充数据库,在Dockerfile中,我首先安装postgres客户端和所有依赖项,然后尝试执行sql dump,如下所示:
RUN apt-get install python python-dev libpq-dev postgresql-client
RUN psql -h $SQL_HOST -U $SQL_USER -W $SQL_DB < some_dump.sql
我收到此错误:
The command '/bin/sh -c psql -h $SQL_HOST -U $SQL_USER -W $SQL_DB < some_dump.sql' returned a non-zero code: 2
变量$ SQL_HOST具有docker容器的名称,我可以ping postgres没有问题。
当我手动设置容器时,我可以执行以下任何问题:
psql -h $SQL_HOST -U $SQL_USER
postgres=#
甚至这个:
/bin/sh
> psql -h $SQL_HOST -U $SQL_USER
postgres=#
但是当我尝试连接到postgres(我猜测)Docker在构建图像时的方式时出现错误:
/bin/sh -c psql -h $SQL_HOST -U $SQL_USER
错误讯息:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
我为何会收到此错误的任何想法?我的猜测是在/ bin / sh shell中没有env vars,但事实并非如此。我甚至在/ bin / sh shell中ping了postgres并成功了。
答案 0 :(得分:0)
很明显,在构建映像时,docker无法识别其他容器的主机,直到您执行可以与其他容器通信的docker run --net <network>
。