Docker構(gòu)建鏡像運(yùn)行容器腳本出現(xiàn)換行符問(wèn)題的解決
場(chǎng)景復(fù)現(xiàn)
當(dāng)我通過(guò)docker命令構(gòu)建鏡像和運(yùn)行容器時(shí)都沒(méi)問(wèn)題
當(dāng)我將docker命令整合到sh腳本文件中,執(zhí)行sh腳本時(shí)出現(xiàn)如下就報(bào)錯(cuò)
Error: context must be a directory: "/root/xxxx/.\r"
截圖

這個(gè)錯(cuò)誤通常是由于腳本中的換行符格式問(wèn)題導(dǎo)致的。原因分析和解決方案如下:
根本原因
錯(cuò)誤信息中路徑末尾的 \r 暴露了問(wèn)題:你的腳本文件使用了 Windows 格式的換行符(CRLF),而 Linux 系統(tǒng)只能正確識(shí)別 Unix 格式的換行符(LF)。當(dāng)腳本執(zhí)行時(shí),Docker 誤將 \r 當(dāng)作路徑的一部分,導(dǎo)致無(wú)法識(shí)別上下文目錄。
解決方案
方法 1:用 sed 命令清理 CR 字符
sed -i 's/\r$//' your_script.sh
執(zhí)行該命令后,再執(zhí)行腳本,報(bào)錯(cuò)解決

方法 2:手動(dòng)修改換行符(通過(guò) Vim)
用 Vim 打開(kāi)腳本:
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)
問(wèn)題情況:行尾顯示 ^M$(CRLF)
修正后的腳本示例
確保你的腳本內(nèi)容如下(注意換行符):
#!/bin/shdocker build -t sb_back:20250327 .
總結(jié)
問(wèn)題根源是腳本文件的換行符格式不兼容。通過(guò)將腳本轉(zhuǎn)換為 Unix 格式(LF),Docker 就能正確識(shí)別構(gòu)建上下文路徑。推薦使用 dos2unix 工具一鍵修復(fù)。
以上就是Docker構(gòu)建鏡像運(yùn)行容器腳本出現(xiàn)換行符問(wèn)題的解決的詳細(xì)內(nèi)容,更多關(guān)于Docker構(gòu)建鏡像換行符問(wèn)題解決的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker-compose管理容器network與ip問(wèn)題
這篇文章主要介紹了docker-compose管理容器network與ip問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Docker容器下運(yùn)行Nginx并實(shí)現(xiàn)反向代理
這篇文章介紹了Docker容器下運(yùn)行Nginx并實(shí)現(xiàn)反向代理的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
docker創(chuàng)建centos容器并在容器里下載MySQL本地連接MySQL
這篇文章主要介紹了docker創(chuàng)建centos容器并在容器里下載MySQL本地連接MySQL,文章內(nèi)容介紹詳細(xì)需要的小伙伴可以參考一下2022-03-03
Docker網(wǎng)絡(luò)模型以及容器通信詳解續(xù)篇
這篇文章主要介紹了Docker網(wǎng)絡(luò)模型以及容器通信詳解續(xù)篇的相關(guān)資料,通過(guò)學(xué)習(xí)Docker網(wǎng)路驅(qū)動(dòng)模型,更好地解決容器間的通信問(wèn)題,需要的朋友可以參考下2022-11-11
Docker部署Redis緩存服務(wù)的實(shí)現(xiàn)步驟
本文介紹了使用Docker部署Redis緩存服務(wù)的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
docker多容器操作與強(qiáng)制刪除容器的方法步驟
有時(shí)候我們會(huì)有很多已經(jīng)停止的容器或者由于錯(cuò)誤強(qiáng)制退出不能用的容器,那我們就需要?jiǎng)h除了,下面這篇文章主要給大家介紹了關(guān)于docker多容器操作與強(qiáng)制刪除容器的方法步驟,需要的朋友可以參考下2022-11-11
Visual Studio發(fā)布 Docker 鏡像的實(shí)現(xiàn)步驟
本文詳細(xì)指導(dǎo)如何在Visual Studio中為ASP.NET Core WebAPI項(xiàng)目集成Docker支持,包括配置步驟、編寫(xiě)Dockerfile、測(cè)試代碼、launchSettings.json配置及docker-compose.yml編寫(xiě),感興趣的可以了解一下2026-04-04

