我想将转储导入Postgres docker contaner。这是我的任务定义:
- name: Import DB
shell: >
cat /tmp/db.backup |
docker-compose exec -T postgres \
psql --username my_user
args:
chdir: "{{ working_directory }}"
这是
fatal: [staging_host]: FAILED! => {"changed": true, "cmd": "cat /tmp/db.backup | docker-compose exec -T postgres psql --username my_user", "delta": "0:00:00.392214", "end": "2019-03-26 15:26:07.443355", "msg": "non-zero return code", "rc": 1, "start": "2019-03-26 15:26:07.051141", "stderr": "psql: could not connect to server: No such file or directory\n\tIs the server running locally and accepting\n\tconnections on Unix domain socket \"/var/run/postgresql/.s.PGSQL.5432\"?\nread unix @->/var/run/docker.sock: read: connection reset by peer", "stderr_lines": ["psql: could not connect to server: No such file or directory", "\tIs the server running locally and accepting", "\tconnections on Unix domain socket \"/var/run/postgresql/.s.PGSQL.5432\"?", "read unix @->/var/run/docker.sock: read: connection reset by peer"], "stdout": "", "stdout_lines": []}
如果我在“ cmd”中手动运行命令没有问题:
cat /tmp/db.backup | docker-compose exec -T postgres psql --username my_user
我想要尽可能少的依赖关系,因此我不想使用postgresql_db
答案 0 :(得分:1)
删除延续行“ \”。由“>”换行符引入的folded style中的空格代替了。
- name: Import DB
shell: >
cat /tmp/db.backup |
docker-compose exec -T postgres
psql --username my_user
args:
chdir: "{{ working_directory }}"
答案 1 :(得分:0)
一种解决方案是创建一个新的临时容器,装入该文件以导入并覆盖命令:
- name: Import DB
shell: >
docker-compose run -T --rm -v /tmp/db.backup:/tmp/db.backup postgres \
psql --host postgres --username postgres < /tmp/db.backup
args:
chdir: "{{ working_directory }}"