将变量从Docker构建文件传递到Docker文件

时间:2019-04-17 18:47:37

标签: docker docker-compose dockerfile

我试图将变量从docker build文件简单地传递到docker file,但是该变量从未解析

version: '3'
services:
    movie-discovery-server:
        container_name: movie-discovery-server
        build:
            args:
              PORT: 8761
            context: /Users/admin/Downloads/movie-discovery-server
            dockerfile: Dockerfile
        image: movie-discovery-server:latest
        environment:
          - PORT=8761
        expose:
            - 8761

这是Dockerfile

FROM openjdk:8
ADD ./target/movie-discovery-server-0.0.1-SNAPSHOT.jar movie-discovery-server-0.0.1-SNAPSHOT.jar
ARG PORT
ENTRYPOINT ["java", "-jar", "movie-discovery-server-0.0.1-SNAPSHOT.jar", "--server.port=$PORT"]

但是$ PORT从未解决

---编辑--- 原来我在文件中犯了几个错误,我在下面的回答中将包含正确的文件格式

2 个答案:

答案 0 :(得分:2)

使用json数组格式时,andENTRYPOINT都不会解析变量。

如果您需要解析PORT,请使用入口点脚本或对CMD使用shell形式表示法

ENTRYPOINT

答案 1 :(得分:0)

原来,我做错了几件事。对于docker compose文件,我进行了以下更改:

  1. 删除了args标签,因为它没有任何作用
  2. expose标签替换为ports标签,因为映射无法正常工作

    version: '3'
    services:
      movie-discovery-server:
        container_name: movie-discovery-server
        build:
            context: /Users/admin/Downloads/movie-discovery-server
            dockerfile: Dockerfile
        image: movie-discovery-server:latest
        ports:
          - "8761:8761"
        environment:
          - PORT=8761
    

对于DockerFile,我应用了@codestation的建议,并放弃了JSON格式

FROM openjdk:8
ADD ./target/movie-discovery-server-0.0.1-SNAPSHOT.jar movie-discovery-server-0.0.1-SNAPSHOT.jar
ARG PORT
ENTRYPOINT java -jar movie-discovery-server-0.0.1-SNAPSHOT.jar --server.port=$PORT