故障原因

  在之前的博客使用IDEA创建Docker镜像,Docker容器,并发布项目中,我们已经成功的发布了项目,但是现在出现了新的问题,比如说我的项目从Git上检出,但是在重新发布Docker镜像时却出现了标题中所述问题,那么这不可能是代码本身的问题,因为之前都已经发布成功了的,而此时出现的问题,只有可能是文件编码的问题。

  比如说我们将Dockerfile文件上传到CentOS,然后使用下面的指令查看该文件的编码格式:

cat -v Dockerfile 

  其显示的结果如下所示:

[root@localhost ~]# cat -v Dockerfile 
#M-iM-^UM-^\M-eM-^CM-^OM-eM-^GM-:M-eM-$M-^D^M
FROM openjdk:8^M
#M-gM-;M-4M-fM-^JM-$M-hM-^@M-^EM-dM-?M-!M-fM-^AM-/^M
MAINTAINER zhangzhenyi^M
#M-iM-^UM-^\M-eM-^CM-^OM-fM-^SM-^MM-dM-=M-^\M-fM-^LM-^GM-dM-;M-$^M
#M-eM-^\M-(M-eM-.M-9M-eM-^YM-(M-gM-^ZM-^DM-fM- M-9M-gM-^[M-.M-eM-=M-^UM-dM-8M--M-eM-^HM-^[M-eM-;M-:spring-cloudM-fM-^VM-^GM-dM-;M-6M-eM-$M-9^M
RUN mkdir -p /spring-cloud^M
#M-eM-0M-^FM-fM-^\M-,M-eM-^\M-0M-iM-!M-9M-gM-^[M-.jarM-eM-^LM-^EM-fM-^KM-7M-hM-4M-^]M-eM-^HM-0DockerM-eM-.M-9M-eM-^YM-(M-dM-8M--M-gM-^ZM-^DM-dM-=M-^MM-gM-=M-.^M
COPY ./eureka.jar /spring-cloud/eureka.jar^M
#M-eM-0M-^FM-fM-^\M-,M-eM-^\M-0M-gM-^ZM-^DM-eM-^OM-/M-fM-^IM-'M-hM-!M-^LM-fM-^VM-^GM-dM-;M-6M-fM-^KM-7M-hM-4M-^]M-eM-^HM-0DockerM-eM-.M-9M-eM-^YM-(M-dM-8M--M-gM-^ZM-^DM-fM- M-9M-gM-^[M-.M-eM-=M-^UM-dM-8M-^K^M
COPY ./app-entrypoint.sh /^M
#M-gM-;M-^Yapp-entrypoint.shM-hM-5M-^KM-dM-:M-^HM-eM-^OM-/M-fM-^IM-'M-hM-!M-^LM-fM-^]M-^CM-iM-^YM-^P^M
RUN chmod +x /app-entrypoint.sh^M
#M-eM-/M-9M-eM-$M-^VM-fM-^ZM-4M-fM-<M-^OM-gM-^ZM-^DM-gM-+M-/M-eM-^OM-#M-eM-^OM-7^M
EXPOSE 8761^M

  在上面的代码中,我们可以看到有很多的^M,而凡是以#开头的都是被注释部分,那里的^M我们不用去管,而其它行的^M则带来了我们上述出现的问题。

解决办法

  当然,我们可以手动删除该字符,但是这里是不推荐,这里推荐的是使用dos2unix进行格式转码。通过该软件,我们将Windows系统中的文件格式转换成相应的Linux系统中的文件格式。

  dos2unix软件的安装指令如下:

yum install dos2unix

  将Windows系统中的Dockerfile转换成Linux系统中的指令如下:

dos2unix Dockerfile

  我们再次查看转换后的结果:

[root@localhost ~]# cat -v Dockerfile 
#M-iM-^UM-^\M-eM-^CM-^OM-eM-^GM-:M-eM-$M-^D
FROM openjdk:8
#M-gM-;M-4M-fM-^JM-$M-hM-^@M-^EM-dM-?M-!M-fM-^AM-/
MAINTAINER zhangzhenyi
#M-iM-^UM-^\M-eM-^CM-^OM-fM-^SM-^MM-dM-=M-^\M-fM-^LM-^GM-dM-;M-$
#M-eM-^\M-(M-eM-.M-9M-eM-^YM-(M-gM-^ZM-^DM-fM- M-9M-gM-^[M-.M-eM-=M-^UM-dM-8M--M-eM-^HM-^[M-eM-;M-:spring-cloudM-fM-^VM-^GM-dM-;M-6M-eM-$M-9
RUN mkdir -p /spring-cloud
#M-eM-0M-^FM-fM-^\M-,M-eM-^\M-0M-iM-!M-9M-gM-^[M-.jarM-eM-^LM-^EM-fM-^KM-7M-hM-4M-^]M-eM-^HM-0DockerM-eM-.M-9M-eM-^YM-(M-dM-8M--M-gM-^ZM-^DM-dM-=M-^MM-gM-=M-.
COPY ./eureka.jar /spring-cloud/eureka.jar
#M-eM-0M-^FM-fM-^\M-,M-eM-^\M-0M-gM-^ZM-^DM-eM-^OM-/M-fM-^IM-'M-hM-!M-^LM-fM-^VM-^GM-dM-;M-6M-fM-^KM-7M-hM-4M-^]M-eM-^HM-0DockerM-eM-.M-9M-eM-^YM-(M-dM-8M--M-gM-^ZM-^DM-fM- M-9M-gM-^[M-.M-eM-=M-^UM-dM-8M-^K
COPY ./app-entrypoint.sh /
#M-gM-;M-^Yapp-entrypoint.shM-hM-5M-^KM-dM-:M-^HM-eM-^OM-/M-fM-^IM-'M-hM-!M-^LM-fM-^]M-^CM-iM-^YM-^P
RUN chmod +x /app-entrypoint.sh
#M-eM-/M-9M-eM-$M-^VM-fM-^ZM-4M-fM-<M-^OM-gM-^ZM-^DM-gM-+M-/M-eM-^OM-#M-eM-^OM-7
EXPOSE 8761

  此时我们可以看到,在非#开头的行中,^M字符已经消失不见了,所以说这说明我们的格式转换已成功,因而直接导出到Windows系统,替换掉原有的文件即可。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐