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

将变量从docker构建文件传递到docker文件,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我试图简单地将一个变量从docker构建文件传递到docker文件,但是该变量从未解析过 version: '3' services: movie-discovery-server: container_name: movie-discovery-server build: args: PORT: 8761 context: /Users/admin/Downloads/movie

我试图简单地将一个变量从docker构建文件传递到docker文件,但是该变量从未解析过

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"]
但是,$端口从未解析

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
---编辑---
事实证明,我在文件中犯了几个错误,我下面的答案将包含正确的文件格式

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

如果需要解析端口,请使用entrypoint脚本或使用
entrypoint的shell形式表示法

ENTRYPOINT java -jar movie-discovery-server-0.0.1-SNAPSHOT.jar --server.port=$PORT

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

如果需要解析端口,请使用entrypoint脚本或使用
entrypoint的shell形式表示法

ENTRYPOINT java -jar movie-discovery-server-0.0.1-SNAPSHOT.jar --server.port=$PORT

结果证明我做了两件错事。对于docker compose文件,我引入了以下更改:

  • 删除了
    args
    标记,因为它没有任何效果
  • 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
    

    结果证明我做了两件错事。对于docker compose文件,我引入了以下更改:

  • 删除了
    args
    标记,因为它没有任何效果
  • 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
    

    我在下面添加了完整的正确格式,以便任何人都能找到它。我在下面添加了完整的正确格式,以便任何人都能找到它