【问题标题】:Docker exec cannot execute script inside containerDocker exec 无法在容器内执行脚本
【发布时间】:2019-03-12 22:37:05
【问题描述】:

我有执行一些 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 吗?

【问题讨论】:

  • 何时以及如何运行上面显示的脚本(不是 init_db.sh,而是包含 init_db.sh 的 docker exec 命令的脚本)?请出示代码。

标签: windows bash docker docker-exec


【解决方案1】:

我遇到了类似的问题...固定我的 Windows 变量的绝对路径: $HOME/docker/...

【讨论】:

  • 你能解释得更清楚些吗?我尝试了 docker exec a_db $HOME/db/dev/init_db.sh 但收到“OCI 运行时 exec 失败:exec 失败:container_linux.go:344:启动容器进程导致“exec:\”C:/Users/Igor/db/ dev/init_db.sh\": stat C:/Users/Igor/db/dev/init_db.sh: 没有这样的文件或目录": unknow"
【解决方案2】:

感谢 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 文件添加到我的 repo 中,现在 init_db.sh 文件总是以 LF 结尾。

【讨论】:

    【解决方案3】:

    这不是 Docker 中的错误,而是 mingw 处理这些路径的方式。这是有关该“功能”的更多信息; http://www.mingw.org/wiki/Posix_path_conversion。使用双斜杠 (//bin/bash) 前缀路径应该可以防止这种情况发生,或者您可以设置 MSYS_NO_PATHCONV=1,参见 How to stop MinGW and MSYS from mangling path names given at the command line

    【讨论】:

      猜你喜欢
      • 2021-05-17
      • 2021-01-04
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 2011-07-03
      • 2010-10-08
      相关资源
      最近更新 更多