0

我有执行一些 Docker 命令的 bash 脚本:

#!/usr/bin/env bash

echo "Create and start database"
cd ../../database
cp -R ../../../scripts/db db/
docker build -t a_database:1 .
docker run --rm --name a_db -e POSTGRES_PASSWORD=docker -d -p 5432:5432 a_database:1
docker network connect --ip 172.23.0.5 a_network a_db
sleep 15

echo "Initialize database"
docker exec a_db /root/db/dev/init_db.sh

echo "Cleanup"
rm -rf db

在 mac 上一切正常,当我尝试在 windows 机器上启动这个脚本时出现问题。当我运行它时,我收到一个错误:

OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: \"C:/Program Files/Git/root/db/dev/init_db.sh\": stat C:/Program Files/Git/root/db/dev/init_db.sh: no such file or directory": unknown

目录和脚本(/root/db/dev/init_db.sh)存在于 docker 容器中。我不知道为什么它会尝试在主机上查找脚本?当我执行命令时:

docker exec a_db /root/db/dev/init_db.sh

直接在命令行(在 Windows 上)执行脚本。知道有什么问题以及为什么要尝试使用 git 吗?

4

3 回答 3

0

这不是 Docker 中的错误,而是 mingw 处理这些路径的方式。这是有关该“功能”的更多信息;http://www.mingw.org/wiki/Posix_path_conversion。使用双斜杠 (//bin/bash) 前缀路径应该可以防止这种情况发生,或者您可以设置 MSYS_NO_PATHCONV=1,请参阅如何阻止 MinGW 和 MSYS 修改命令行中给出的路径名

于 2021-01-13T09:40:06.667 回答
0

感谢 igaul 的回答,我能够在 Windows 机器上运行它。有两个问题:

  1. docker 容器中脚本的路径。
    代替:

    docker exec a_db /root/db/dev/init_db.sh
    

    应该:

    docker exec a_db root/db/dev/init_db.sh
    
  2. init_db.sh 中的行结尾。在从 init_db.sh 的 bitbucket 行结尾提取存储库后的 Windows 机器上设置为 CRLF 导致问题的原因。我已将 .gitattribute 文件添加到我的存储库中,现在 init_db.sh 文件始终具有 LF 结尾。

于 2019-03-13T14:36:50.093 回答
0

我有一个类似的问题...固定我的 Windows 变量的绝对路径:$HOME/docker/...

于 2019-03-12T22:49:30.193 回答