我正在学习使用docker。我正在使用 docker 使用 postgresql 和 pgadmin4 设置数据库。我写了一个
docker-compose.yml
文件如下,
version: '3.8'
services:
db:
container_name: postgres
image: postgres
restart: always
volumes:
- ${HOME}/Desktop/dbms-2/:/var/lib/postgresql/data
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: root
POSTGRES_DB: test_db
ports:
- "5432:5432"
build:
context: .
dockerfile: Dockerfile
pgadmin:
container_name: pgadmin4
image: dpage/pgadmin4
restart: always
volumes:
- ${HOME}/Desktop/dbms-2/:/var/lib/pgadmin4/storage
environment:
PGADMIN_DEFAULT_EMAIL: [email protected]
PGADMIN_DEFAULT_PASSWORD: root
ports:
- "5050:80"
还有一个用于在 Postgres 中启动 SQL 脚本的 docker 文件,如下所示,(我有
docker-entrypoint-initdb.d
子目录和 docker-compose.yml
在同一根目录中。)
FROM postgres:latest
COPY docker-entrypoint-initdb.d/*.sql /docker-entrypoint-initdb.d/
RUN chmod a+r /docker-entrypoint-initdb.d/*
EXPOSE 6666
现在我的 csv 文件包含本地文件系统中另一个目录中的表。当我将这些文件复制到
/var/lib/pgadmin/storage/admin_admin.com/
和 ${HOME}/Desktop/dbms-2/
目录后尝试从 pgAdmin4 GUI 导入它们时,我得到了一个
[Errno 13]权限被拒绝:'/var/lib/pgadmin/storage/admin_admin.com/name.basics.tsv'。
还有比这些更好的导入表格的方法吗?我在这里犯了什么错误?我怎样才能将这个
docker-compose.yml
和 Dockerfile
合并到一个 docker-compose.yml
文件中。
我不知道如何使文件可供 docker 容器使用。不过这个解决方案有效。您不需要使用 pgadmin。
docker exec -i postgrescontaineer psql -U postgres mydatabase < /home/user/db.sql