Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过docker run运行插入的sql文件?_Docker_Psql_Docker Run_Docker Exec - Fatal编程技术网

如何通过docker run运行插入的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

给定具有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 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谢谢你的回答。这有帮助。