当我在Windows上使用vagrant + docker时,文件系统问题

这是我的stream浪文件

Vagrant.configure("2") do |config| config.vm.define "app" do |app| app.vm.provider "docker" do |d| d.build_dir = "." d.cmd = ["/sbin/my_init", "--enable-insecure-key"] end end config.ssh.username = "root" config.ssh.private_key_path = "insecure_key" end 

这是我的docker文件

 FROM phusion/baseimage:0.9.15 MAINTAINER neetu ENV HOME /root RUN mkdir /buzzbuild ADD . /buzzbuild RUN cd /buzzbuild/ && chmod 777 install.sh && sh install.sh CMD ["/sbin/my_init"] EXPOSE 80 443 5000 15672 

所以你可以看到.. 1)我将我的buidl目录(。)添加到/ buzzbuild 2),并在那里运行一个安装脚本(在我CD进入该目录后)

我得到了

root @ 8bde177d1bc2:/ buzzbuild#./test2.sh -bash:./install.sh:/ bin / sh ^ M:错误的解释器:没有这样的文件或目录

安装脚本的内容是: –

 #!/bin/sh #apt-get update apt-get update apt-get install -y -q git 

如果我创build新文件(test.sh)和更改它的权限,并添加相同的内容,它的工作原理。

但是install.sh脚本不起作用。

我怀疑它的文件从Windows添加到Ubuntu(容器)

有什么build议么 ?

怎么了

错误消息root@8bde177d1bc2:/buzzbuild# ./test2.sh -bash: ./install.sh: /bin/sh^M: bad interpreter: No such file or directory给你提示你的install.sh文件有Windows风格的结尾。

Windows的行尾是由两个字符组成的: \r\n而Linux的行尾只是\n^M表示错误信息中的\r字符。

该怎么办

要么确保你所有的脚本在构build你的图像之前都使用了Linux风格的行尾,或者在Dockerfile中添加一个修复行尾的RUN语句:

 ADD . /buzzbuild RUN cd /buzzbuild/ \ && sed -i 's/\r//' install.sh \ && chmod 777 install.sh \ && sh install.sh