如何通过docker-compose.yml将配置参数传递给Flink Docker镜像?

4

我希望将以下配置参数传递给Flink Docker镜像的docker-compose.yml文件。

state.checkpoints.dir: s3://.../flink/checkpoint
state.savepoints.dir: s3://.../flink/savepoint
s3.access-key: ...
s3.secret-key: ...
jobmanager.execution.failover-strategy: region

有人可以帮我如何做吗?

docker镜像 - flink:1.9.0

2个回答

2

如果有人正在寻找答案,请在FLINK_PROPERTIES的整个条目周围加上双引号来转义冒号:

jobmanager:
    image: flink:1.9-scala_2.11
    command: "jobmanager.sh start-foreground"
    ports:
      - 8081:8081
    volumes:
      - ./conf:/opt/flink/conf
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager
      - "FLINK_PROPERTIES=a: b \nc: d"

2
将配置文件夹挂载到容器中
您可以创建一个卷,将主机系统中的文件夹挂载到 Docker 容器中 Flink 配置的位置。 Flink Operations Playground正在这样做,以向 Flink Docker 映像传递自定义配置。
docker-compose.yaml 中 JobManager 的条目可能如下所示:
  jobmanager:
    image: flink:1.9-scala_2.11
    command: "jobmanager.sh start-foreground"
    ports:
      - 8081:8081
    volumes:
      - ./conf:/opt/flink/conf
    environment:
      - JOB_MANAGER_RPC_ADDRESS=jobmanager

它将挂载./conf文件夹(应该与docker-compose.yaml文件在一起)到Docker容器中的/opt/flink/conf位置,这是FLink获取其配置的位置。
通过环境变量传递参数也是一种选择。 docker-entrypoint.sh脚本用于启动Flink容器,似乎会将FLINK_PROPERTIES变量的内容附加到配置文件中。不过我还没有使用过这种方法。

谢谢,@Fabian。我正在使用挂载文件夹的解决方案,但它不够灵活/动态。如果我想在运行jobmanager/taskmanager时传递一些值或更改一些配置,通过环境变量会非常方便。因此,我正在寻找“如何使用FLINK_PROPERTIES”。 - Dharam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接