Docker:$'\ r':在Windows上找不到命令

时间:2018-08-17 04:59:56

标签: mysql windows docker docker-compose dockerfile

我目前具有以下Docker设置,以在本地(Windows 10)计算机上运行MySQL 5.7容器:

内部版本/ Dockerfile:

# Base image
FROM mysql:5.7

# Copy starting scripts file
COPY start.sh /root/start.sh

RUN sed -i 's/\r$//' /root/start.sh

# Run necessary services
CMD ["/bin/bash", "/root/start.sh"]

builds / start.sh

#!/bin/sh

cp /etc/mysql/conf.d/temp/* /etc/mysql/conf.d/

/entrypoint.sh mysqld

docker-compose.yml

version: '2'

services:
   db:
     build: ./builds
     container_name: mysql1
     environment:
       MYSQL_ROOT_HOST: '%'
       MYSQL_ROOT_PASSWORD: "test2"
     ports:
       - "13306:3306"
     volumes:
       - ./containerdata:/etc/mysql/conf.d/temp

容器数据: ....包含一个MySQL my.cnf文件以自定义绑定,从而允许从主机等进行连接...

此设置在我的另一台Linux机器上完美运行(运行docker-compose时),但在此Windows机器上失败,并出现以下错误:

mysql1 | /root/start.sh: line 2: $'\r': command not found
mysql1 | cp: cannot stat '/etc/mysql/conf.d/temp/*': No such file or directory
mysql1 | /root/start.sh: line 4: $'\r': command not found
: not foundntrypoint.sh: line 215: exec: mysqld
mysql1 exited with code 127

如您所见,我什至尝试使用“ sed”替换所有的“ \ r”(即使当我用Notepad ++打开start.sh文件时,该行的结尾已经是Unix-LF并且没有' \ r')。即使这样,仍然会因上述错误而失败。

您能帮我解决这个问题吗?预先感谢您的帮助。

编辑:我已经在Dockerfile中使用过“ Linux容器”,也尝试过使用dos2unix而不是sed。

4 个答案:

答案 0 :(得分:1)

通过在 Notepad++ 中将 LF 更改为 Unix,我能够轻松地做到这一点。 在 Notepad++ 中打开文件,然后查看右下角。您会看到“Windows (CRLF)”将其更改为“Unix (LF)”,这将解决问题。

答案 1 :(得分:0)

我正在通过相同的问题,我发现此错误是由仅Windows使用的角色引起的。要解决此错误,请使用nano或其他linux文件编辑器编写文件shellscript。

如果使用Windows 10,则可以启动子系统linux来编写shellscript。

希望这会有所帮助

答案 2 :(得分:0)

从主项目存储库更新 git pull 后,我的 Windows 机器上遇到了类似的问题。为了修复它,我用这一行将 .gitattributes 文件放在我的 repo 根目录

*.sh    text eol=lf

实际上,它禁止 git 根据当前操作系统更改 *.sh 文件中的 EOL 符号。

答案 3 :(得分:-1)

出现这些错误是因为您正在Windows容器中运行脚本,并且没有/etc/mysql目录和其他一些Linux东西。

但是,您可以在Windows docker设置中使用Linux容器,因此您的容器将在Linux容器中运行。

enter image description here