簡體   English   中英

Docker exec 無法在容器內執行腳本

[英]Docker exec cannot execute script inside container

我有執行一些 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

docker 容器中存在目錄和腳本(/root/db/dev/init_db.sh)。 我不知道為什么它試圖在主機上查找腳本? 同樣,當我執行命令時:

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

直接在命令行(在 Windows 上)腳本中執行。 知道出了什么問題以及為什么要嘗試使用 git 嗎?

我有一個類似的問題...... Windows 變量的絕對路徑修復了我的: $HOME/docker/...

感謝 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 結尾。

這不是 Docker 中的錯誤,而是 mingw 處理這些路徑的方式。 這是有關該“功能”的更多信息; http://www.mingw.org/wiki/Posix_path_conversion 用雙斜杠 (//bin/bash) 前綴路徑應該可以防止這種情況,或者您可以設置 MSYS_NO_PATHCONV=1,請參閱如何阻止 MinGW 和 MSYS 修改命令行中給出的路徑名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM