我目前具有以下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。
答案 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)