Docker構(gòu)建鏡像運(yùn)行容器腳本出現(xiàn)換行符問題的解決
場(chǎng)景復(fù)現(xiàn)
當(dāng)我通過docker命令構(gòu)建鏡像和運(yùn)行容器時(shí)都沒問題
當(dāng)我將docker命令整合到sh腳本文件中,執(zhí)行sh腳本時(shí)出現(xiàn)如下就報(bào)錯(cuò)
Error: context must be a directory: "/root/xxxx/.\r"
截圖
這個(gè)錯(cuò)誤通常是由于腳本中的換行符格式問題導(dǎo)致的。原因分析和解決方案如下:
根本原因
錯(cuò)誤信息中路徑末尾的 \r
暴露了問題:你的腳本文件使用了 Windows 格式的換行符(CRLF),而 Linux 系統(tǒng)只能正確識(shí)別 Unix 格式的換行符(LF)。當(dāng)腳本執(zhí)行時(shí),Docker 誤將 \r
當(dāng)作路徑的一部分,導(dǎo)致無法識(shí)別上下文目錄。
解決方案
方法 1:用 sed 命令清理 CR 字符
sed -i 's/\r$//' your_script.sh
執(zhí)行該命令后,再執(zhí)行腳本,報(bào)錯(cuò)解決
方法 2:手動(dòng)修改換行符(通過 Vim)
用 Vim 打開腳本:
vi your_script.sh
執(zhí)行以下命令強(qiáng)制轉(zhuǎn)換為 Unix 格式:
:set ff=unix
保存退出:
:wq
方法 3:用 dos2unix 轉(zhuǎn)換腳本格式
安裝轉(zhuǎn)換工具(如果未安裝):
yum install dos2unix -y # CentOS apt-get install dos2unix -y # Ubuntu
轉(zhuǎn)換腳本文件:
dos2unix your_script.sh
重新運(yùn)行腳本:
sh your_script.sh
驗(yàn)證腳本格式
使用 cat -A
檢查隱藏字符:
cat -A your_script.sh
正常情況:行尾顯示 $
(LF)
問題情況:行尾顯示 ^M$
(CRLF)
修正后的腳本示例
確保你的腳本內(nèi)容如下(注意換行符):
#!/bin/shdocker build -t sb_back:20250327 .
總結(jié)
問題根源是腳本文件的換行符格式不兼容。通過將腳本轉(zhuǎn)換為 Unix 格式(LF),Docker 就能正確識(shí)別構(gòu)建上下文路徑。推薦使用 dos2unix
工具一鍵修復(fù)。
以上就是Docker構(gòu)建鏡像運(yùn)行容器腳本出現(xiàn)換行符問題的解決的詳細(xì)內(nèi)容,更多關(guān)于Docker構(gòu)建鏡像換行符問題解決的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
手把手帶大家通過Docker部署前后端分離項(xiàng)目(親測(cè)可用)
近年來前后端分離已經(jīng)成為中大型軟件項(xiàng)目開發(fā)的最佳實(shí)踐,下面這篇文章主要給大家介紹了關(guān)于通過Docker部署前后端分離項(xiàng)目的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06docker搭建lnmp環(huán)境的實(shí)現(xiàn)步驟
DNMP(Docker + Nginx + MySQL + PHP7/5 + Redis)是一款全功能的LNMP一鍵安裝程序,本文就來介紹一下docker搭建lnmp環(huán)境的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07centos7搭建docker私人倉庫的方法(kubernetes)
這篇文章主要介紹了centos7搭建docker私人倉庫的方法(kubernetes),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03詳細(xì)講解Docker-Compose部署Kafka?KRaft集群環(huán)境
這篇文章主要為大家介紹了Docker-Compose部署Kafka?KRaft集群環(huán)境的全面詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01docker實(shí)現(xiàn)導(dǎo)出、導(dǎo)入和數(shù)據(jù)搬遷
本篇文章主要介紹了docker實(shí)現(xiàn)導(dǎo)出、導(dǎo)入和數(shù)據(jù)搬遷,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07docker安裝sentinel的實(shí)現(xiàn)示例
本文主要介紹了docker安裝sentinel的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12