我正在尝试获取一组容器/图像(来自https://github.com/OHDSI/Broadsea),因此撰写将无法工作。我按照此答案中的步骤进行操作https://stackoverflow.com/a/53068212/1400648但我在复制定义的卷和在目标机器上运行映像时遇到了问题。在 docker-compose.yml 上,有问题的容器 (broadsea-atlasdb) 声明了以下卷。:
volumes:
- atlasdb-postgres-data:/var/lib/postgresql/data
- ./100_populate_source_source_daimon.sql:/docker-entrypoint-initdb.d/100_populate_source_source_daimon.sql:ro
我已经能够导出 atlasdb-postgres-data 卷的内容并将其提取到目标机器上。我还能够将 broadsea-atlasdb 映像保存到目标机器并在那里加载。我尝试了以下所有命令,但都给出了相同的错误
sudo docker create --name broadsea-atlasdb -v /datos/broadsea/atlasdb-postgres-data:/var/lib/postgresql/data broadsea-atlasdb
sudo docker create --name broadsea-atlasdb -v /datos/broadsea/atlasdb-postgres-data:/var/lib/postgresql/data --entrypoint "/bin/true" broadsea-atlasdb
sudo docker create --name broadsea-atlasdb broadsea-atlasdb
sudo docker run -d broadsea-atlasdb
全部抛出错误
守护进程的错误响应:无法在现有文件上挂载卷,文件存在 /datos/docker/overlay2/ce076849ec5987a70b2d6b63f6b705f841579ac0e5f565fcc15ef36a5d9c996d/merged/docker-entrypoint-initdb.d/100_populate_source_source_daimon.sql
卷本身在目标机器上尚不存在。这是否是安装问题而不是卷问题?在创建或运行其他容器之前是否应该创建 atlasdb-postgres-data?(因为它引用了卷)
答案1
错误是由于:
- ./100_populate_source_source_daimon.sql:/docker-entrypoint-initdb.d/100_populate_source_source_daimon.sql:ro
如果100_populate_source_source_daimon.sql
不存在,docker 会将其初始化为一个空目录。在 Linux 中,您无法将目录挂载到文件之上。请删除该卷挂载,或在启动容器之前创建该文件。