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

时间:2014-10-24 18:01:12

标签: windows vagrant docker supervisord vagrantfile

这是我的流浪文件

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

这是我的泊坞文件

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)并在那里运行安装脚本(在我进入该目录之后)

我得到了

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

如果我创建新文件(test.sh)并对其更改权限并添加相同的内容,则可以使用。

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

我怀疑从windows添加到ubuntu(容器)的文件存在问题

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

出了什么问题

错误消息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字符。

该怎么做

在构建映像之前确保所有脚本都使用Linux样式的行尾,或者在Dockerfile中添加修复行尾的RUN语句:

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