我在Windows Server 2016和2019上安装了Docker EE。我正在启动一个PostgreSQL容器,并有一个initdb.sql脚本来初始化数据库。我使用的是Windows容器,并且已在Windows 10的Windows容器模式下测试了脚本,包括docker和docker-compose。但是,一旦我将其移到Windows Server 2016/2019上,数据库就会启动,但不会运行initdb.sql脚本。这是我的docker-compose文件。
version: "3"
networks:
localnetwork:
services:
postgres_db:
image: stellirin/postgres-windows:12-1809
restart: unless-stopped
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
volumes:
- .\admin\${ENV:-dev}\dbms\init:C:\docker-entrypoint-initdb.d
ports:
- "5432:5432"
networks:
- localnetwork
如何让Windows Server 2016/2019运行initdb.sql?我无法使用docker exec
进入容器,因为它返回Access is denied.
请注意,在Windows 10中也会出现Access is denied
的情况。但是我可以使用Docker Desktop的界面进入容器进行检查。 Docker EE没有Docker Desktop,因此无法完成此操作。
exec
命令?我的意思是,您能否指出您正在尝试运行的docker exec
命令?您尝试过docker exec -it <container id> powershell
或docker exec -it <container id> cmd
吗?也许错误可能与卷挂载有关,也许由于某种原因initdb.sql
脚本未被复制到容器中。 - jccampanerodocker exec -it <container id> powershell
,但是镜像没有安装PowerShell,所以无效。然后我尝试了docker exec it <container id> :C/
,但无法访问(access denied)。我在WS2019和W10上都遇到了这个问题,不过,在W10上使用Docker Desktop,我仍然能够登录到容器CLI。我试图将initdb复制到:C/
,并在容器初始化期间执行command: dir
以打印出:c\
上的文件,发现initdb已经存在。此外,dir
还显示了C:\docker-entrypoint-initdb.d
是WS2019上的一个文件夹。 - Rui Nianinitdb.sql
生成表的日志。 - Rui Niandocker exec -it <container id> cmd
吗?重要的是要检查initdb.sql
文件是否在C:\docker-entrypoint-initdb.d
中。作为解决方法,为避免与挂载卷相关的一些可能的错误,您可以尝试创建一个非常基本的Dockerfile
并复制 initdb.sql:`FROM stellirin/postgres-windows:12-1809WORKDIR /docker-entrypoint-initdb.dCOPY initdb.sql ./ `。然后在您的 docker compose 中使用此 dockerfile。请问您能否尝试一下?这可能会给您一些线索。 - jccampanero