首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile特殊转义符号

Dockerfile特殊转义符号
EN

Stack Overflow用户
提问于 2020-08-01 05:21:57
回答 1查看 466关注 0票数 1

当我使用带有'-- build -arg‘的命令来构建对接图像时,传入参数中的空格将被替换为加号。

我的pom.xml:

代码语言:javascript
复制
<plugin>
   <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>1.4.13</version>
    <configuration>
      <repository>192.168.1.200/library/${project.artifactId}</repository>
      <tag>${project.version}</tag>
      <buildArgs>
         <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
         <JVM_OPTS>-Xms300m -Xmx300m</JVM_OPTS>
      </buildArgs>
    </configuration>
</plugin>

我的Dockerfile:

代码语言:javascript
复制
FROM 192.168.1.200/library/openjdk:8-jdk-alpine
MAINTAINER gaojiayiner@163.com
LABEL version="1.0.0"
RUN mkdir -p /project && mkdir -p /data
ENV workdir /project
WORKDIR $workdir
ARG JAR_FILE
ARG JVM_OPTS
ENV jvm $JVM_OPTS
COPY target/${JAR_FILE} /project/demo.jar
EXPOSE 8080
ENTRYPOINT ["sh","-c","java -jar /project/demo.jar $0 $@"]

终端执行记录:

代码语言:javascript
复制
[root@localhost docker-java]# mvn clean package dockerfile:build
[root@localhost docker-java]# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
192.168.1.200/library/demo      0.0.1-SNAPSHOT      13373a4761a1        3 seconds ago       131MB
192.168.1.200/library/openjdk   8-jdk-alpine        a3562aa0b991        14 months ago       105MB
[root@localhost docker-java]# docker run -d  13373a4761a1
d0b5ce9392b12505419d5648332f204dc3d59327efd389c27a950aa0d1daba35
[root@localhost docker-java]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                                            NAMES
d0b5ce9392b1        13373a4761a1             "sh -c 'java -jar /p…"   4 seconds ago       Up 4 seconds        8080/tcp                                         reverent_kirch
[root@localhost docker-java]# docker exec -it d0b5ce9392b1 sh
/project # env
jvm=-Xms300m+-Xmx300m
JAVA_ALPINE_VERSION=8.212.04-r0
HOSTNAME=d0b5ce9392b1

您可以看到代码jvm=-Xms300m+-Xmx300m.我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2020-08-01 06:00:25

您需要自己重新编译spotify/dockerfile-maven,因为修复此bug的拉请求尚未合并/接受。

见"spotify/dockerfile-maven PR 350

它指出了罪魁祸首:plugin/dockerfile/BuildMojo.java#encodeBuildParam

代码语言:javascript
复制
  private static String encodeBuildParam(Object buildParam) throws MojoExecutionException {
    try {
      return URLEncoder.encode(new Gson().toJson(buildParam), "utf-8");
    } catch (UnsupportedEncodingException e) {
      throw new MojoExecutionException("Could not build image", e);
    }
  }

的确,我们可以读到here (class URLEncoder)URLEncoder将空格字符“”替换为加号"+“。

编码之后,我添加了一个替换,将+符号替换为空格:编码之后,所有加号都将被编码为/0x2B,所以剩下的是来自空格的符号。

解决办法将包括:

代码语言:javascript
复制
      return URLEncoder.encode(
               new Gson().toJson(buildParam), StandardCharsets.UTF_8.toString()
             ).replace('+', ' ');
              ^^^^^^^^^^^^^^^^^^^
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63202063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档