如何通过docker run运行插入的sql文件?
给定具有SQL插入的文件:如何通过docker run运行插入的sql文件?,docker,psql,docker-run,docker-exec,Docker,Psql,Docker Run,Docker Exec,给定具有SQL插入的文件: INSERT INTO countries (id, country_code, name) VALUES (1, 'AF', 'Afghanistan'), (2, 'AL', 'Albania'); 我想在运行postgres的容器上使用docker run命令来运行该文件 我试过这个: docker run -e domain="192.168.99.100" pg /bin/bash -c "psql -d wh
INSERT INTO countries (id, country_code, name)
VALUES
(1, 'AF', 'Afghanistan'),
(2, 'AL', 'Albania');
我想在运行postgres的容器上使用docker run命令来运行该文件
我试过这个:
docker run -e domain="192.168.99.100" pg /bin/bash -c "psql -d whiteboard_api -a -f inserts_into_countries_table.sql"
psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
你可以看到我的图像是pg:
capistrano:whiteboard_v2 jzollars$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b500bec9210 bbb "/usr/bin/supervisord" 4 weeks ago Up 4 weeks 0.0.0.0:80->80/tcp distracted_raman
c1e88f2695f5 wh "/usr/bin/supervisord" 4 weeks ago Up 4 weeks 0.0.0.0:3000->3000/tcp high_einstein
7e383e99bdc3 pg "/usr/lib/postgresql/" 4 weeks ago Up 4 weeks 0.0.0.0:5432->5432/tcp pg_test
如何使用docker run加载此文件并在docker容器中运行它?对正在运行的容器使用执行命令 要将文件ex:dump.sql复制到容器中,请使用 因此,您的方法可能如下所示:
docker cp ./dump.sql pg_test:/docker-entrypoint-initdb.d/dump.sql
docker exec -u postgres pg_test psql postgres postgres -f docker-entrypoint-initdb.d/dump.sql
此处为通用形式:
docker cp ./localfile.sql containername:/container/path/file.sql
docker exec -u postgresuser containername psql dbname postgresuser -f /container/path/file.sql
请注意,如果每次运行数据库时都需要为其设置种子,那么如果您使用PostgreSQL的正式docker映像,则/docker-entrypoint-initdb.d/文件夹不适用于我。 我得出这个解决方案:
docker exec -it <container-name> psql -U <DB_USER> -d <DB_NAME> -f /file.sql
!/bin/bash
set-e
FUN_SQL2=
创建或替换函数插入事件文本
将整数返回为
\\\\$BODY\\\\$
声明ret整数;
开始
在ret中选择$1;
返回ret;
终止
\\\\$BODY\\\\$
语言“plpgsql”VOLATILE
成本100;
将函数添加到数据库
docker exec-it db_容器sh-c psql-U postgres-d db_名称-c\$FUN_SQL2\;
您可以通过一行程序针对正在运行的postgres容器运行sql命令文件
cat ./query.sql | docker exec -i <container-name> psql -U <user> -d <database>
无需将文件从主机复制到容器。能否共享pg image Dockerfile?谢谢,这是一个很好的答案,特别是像通用的formis那样,没有将文件复制到容器中就可以做到这一点?我环顾了一下,没有将文件复制到docker容器中,我无论如何都找不到这样做的方法,如果有人找到了方法,请发布answer@MaxCarroll,您可以将文件装入容器,我没有使用卷标志:docker run-v./dump.sql:/docker-entrypoint-initdb.d/dump.sql pg_明确地复制它,而是在容器内测试/file.sql,还是在主机上测试,但它说找不到文件,我想知道它是否在容器中而不是主机中查找文件?文件必须在容器中。你可以用docker cp\\\$BODY\\\复制它。必须包含3\\\这对我来说很有用。我犹豫是否使用其他答案,因为它们都使用多行,或者将文件存储在docker实例上。我认为这是对我的用例最好的回答,因为它只执行脚本,其他什么都不执行。基于这个回答,我希望它也能工作,它做到了。谢谢echo从表中选择*docker exec-i postgresdb psql-U user-d dbSeems仅在docker容器中的db上运行psql时工作。不会在远程数据库上运行。提到这一点是因为我只想使用docker容器的psql命令在另一个db.Ok上运行SQL。找到了方法:echo选择count*from…|docker exec-i postgres-12.3 sh-c export PGPASSWORD=&&psql-U-h-p5432-d谢谢你的回答。这有帮助。