我想确保我的Postgres数据(使用基于Linux图像)保持,即使在我的Windows主机重启后。
我尝试按照以下步骤操作如何使用卷将数据持久化到dockerize postgres数据库中
volumes:
- ./postgres_data:/var/lib/postgresql/data
然而,我发现了一个错误
waiting for server to start....FATAL: data directory "/var/lib/postgresql/data/pgdata" has wrong ownership
HINT: The server must be started by the user that owns the data directory.
stopped waiting
pg_ctl: could not start server
然后,我试着跟着插手https://forums.docker.com/t/trying-to-get-postgres-to-work-on-persistent-windows-mount-two-issues/12456/5
建议的方法是
docker volume create --name postgres_data --driver local
services:
postgres:
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
external: true
但是,我对docker卷create--namepostgres_data--drivelocal
命令感到困惑。因为,它没有提到Windows主机的确切路径。
我试过了
C:\celery-hello-world>docker volume create postgres_data
postgres_data
C:\celery-hello-world>docker volume inspect postgres_data
[
{
"CreatedAt": "2018-02-06T14:54:48Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/postgres_data/_data",
"Name": "postgres_data",
"Options": {},
"Scope": "local"
}
]
我可以知道Windows目录的位置在哪里吗?postgres\u数据装载到哪个卷?
今天我问自己同样的问题,但我已经想通了。
首先要注意的是,在postgres容器内的路径是:
/var/lib/postgresql/data
现在你试图追踪的路径是另一条路径:
C: \芹菜你好世界
/var/lib/docker/volumes/postgres_data/_data
我也在使用Docker for windows和Unix容器。
您可以正常检查,您不会看到此docker机器:
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
但是关于Unix容器,有一个访问它的技巧:
docker run -it --rm --privileged --pid=host justincormack/nsenter1
只需从您的CLI运行它,它就会将您放入具有Moby VM完全权限的容器中。仅适用于MobyLinuxVM(不适用于Windows容器)。请注意,这也适用于Docker for Mac。
参考:https://www.bretfisher.com/getting-a-shell-in-the-docker-for-windows-vm/
您可以从那里导航到此文件夹(注意,我将我的卷命名为postgresql卷):
/var/lib/docker/volumes/postgresql-volume/_data ls
PG_VERSION pg_dynshmem pg_notify pg_stat_tmp postgresql.auto.conf
base pg_hba.conf pg_replslot pg_subtrans postgresql.conf
global pg_ident.conf pg_serial pg_tblspc postmaster.opts
pg_clog pg_logical pg_snapshots pg_twophase postmaster.pid
pg_commit_ts pg_multixact pg_stat pg_xlog
所以要清楚的是,它在上面目录中的Docker for Windows
提供的VM中。
windows Docker需要为虚拟化启用Hyper-V。
您还可以在Docker for windows中找到图像位置,转到设置-
"C:\ProgramData\DockerDesktop\vm-data\DockerDesktop.vhdx"
另请注意,在Hyper-V Manager中也可以找到相同的内容。
我想建立一个Docker图像,包括我的自定义Powershell模块。因此,我使用Microsofts图像,我想从这里创建我自己的图像,其中包括我的psm1文件。 我想把C:\temp\someDirectory中包含的文件复制到docker linux容器中。在构建映像时,我得到以下错误: C:\temp\docker_posh>docker build--rm-f dockerfile-t d
问题内容: 我们可以在docker中拥有一个数据量: 但是,如果数据量存在,则与使用装入文件夹中的数据有什么不同? 问题答案: 它与使用-v / path / to / data / in / container:/ home / user / a_good_place_to_have_data装入文件夹中的数据有何不同? 这是因为,如“ 将主机目录装载为数据卷 ”中所述 主机目录从本质上说是依赖
问题内容: 我需要从多个JSON文件中加载数据,每个文件中都有多个记录到Postgres表中。我正在使用以下代码,但无法正常工作(在Windows上使用pgAdmin III) SAMPLE.JSON文件的内容是这样的(从许多这样的记录中得到两个记录): 问题答案: 试试这个:
我已经把Kafka和博士后的成绩记录下来了。我使用JDBC接收器连接器将数据从Kafka主题加载到Postgres表。首先,我用“AVRO”值格式创建一个主题和一个主题上方的流。 以下是创建接收器连接器的代码: 然后,我使用命令检查Postgres是否有来自Kafka的数据,它返回以下信息:
挂载主机目录 挂载一个主机目录作为数据卷 使用 --mount 标记可以指定挂载一个本地主机的目录到容器中去。 $ docker run -d -P \ --name web \ # -v /src/webapp:/opt/webapp \ --mount type=bind,source=/src/webapp,target=/opt/webapp \ training/
我有一个docker compose文件,看起来像: 运行之后,我看到所有的服务都启动了,并且看起来工作良好。我的服务使用以下sqlalchemy连接字符串连接到postgres: 编辑:这是在接受的解决方案中的一个评论中回答的,但我认为值得在这里指出:我已经在本地运行postgres,这引起了各种混乱。 删除我的本地postgres实例并更新我的hosts文件,就像接受的答案中提到的那样,一切都