You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M1 Monterey环境下无法启动Docker中的Flink JobManager容器

操作命令

使用的Flink容器启动命令:

docker run \
        --rm \
        --name=jobmanager \
        --network flink-network \
        --publish 8081:8081 \
        --env FLINK_PROPERTIES="${FLINK_PROPERTIES}" \
        flink:1.16.0-scala_2.12 jobmanager

报错信息

容器启动失败,报错日志如下:

INFO  org.apache.flink.runtime.entrypoint.ClusterEntrypoint        [] - Shutting StandaloneSessionClusterEntrypoint down with application status FAILED. Diagnostics java.io.IOException: Could not create the working directory /tmp/jm_ba47b82cf8d85068faa1c41d30126b5d.
        at org.apache.flink.runtime.entrypoint.WorkingDirectory.createDirectory(WorkingDirectory.java:58)
        at org.apache.flink.runtime.entrypoint.WorkingDirectory.<init>(WorkingDirectory.java:39)
        at org.apache.flink.runtime.entrypoint.WorkingDirectory.create(WorkingDirectory.java:88)
        at org.apache.flink.runtime.entrypoint.ClusterEntrypointUtils.lambda$createJobManagerWorkingDirectory$2(ClusterEntrypointUtils.java:241)
        at org.apache.flink.runtime.entrypoint.DeterminismEnvelope.map(DeterminismEnvelope.java:49)
        at org.apache.flink.runtime.entrypoint.ClusterEntrypointUtils.createJobManagerWorkingDirectory(ClusterEntrypointUtils.java:239)
        at org.apache.flink.runtime.entrypoint.ClusterEntrypoint.initializeServices(ClusterEntrypoint.java:356)
        at org.apache.flink.runtime.entrypoint.ClusterEntrypoint.runCluster(ClusterEntrypoint.java:282)
        at org.apache.flink.runtime.entrypoint.ClusterEntrypoint.lambda$startCluster$1(ClusterEntrypoint.java:232)
        at org.apache.flink.runtime.security.contexts.NoOpSecurityContext.runSecured(NoOpSecurityContext.java:28)
        at org.apache.flink.runtime.entrypoint.ClusterEntrypoint.startCluster(ClusterEntrypoint.java:229)
        at org.apache.flink.runtime.entrypoint.ClusterEntrypoint.runClusterEntrypoint(ClusterEntrypoint.java:729)
        at org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint.main(StandaloneSessionClusterEntrypoint.java:59)

Docker版本信息

Client:
 Cloud integration: v1.0.29
 Version:           20.10.22
 API version:       1.41
 Go version:        go1.18.9
 Git commit:        3a2c30b
 Built:             Thu Dec 15 22:28:41 2022
 OS/Arch:           darwin/arm64
 Context:           default
 Experimental:      true

核心问题

为何容器无法创建所需的工作目录?


可能的原因及解决方法

  • 镜像架构不兼容:Flink 1.16.0-scala_2.12官方镜像默认是amd64架构,M1的arm64架构通过Docker转译运行时,可能出现文件系统权限或兼容性问题。
    解决:启动容器时指定arm64平台,命令修改为:

    docker run \
            --rm \
            --name=jobmanager \
            --network flink-network \
            --publish 8081:8081 \
            --platform linux/arm64 \
            flink:1.16.0-scala_2.12 jobmanager
    

    或者选择官方支持arm64的Flink镜像版本(比如1.17及以后版本对arm支持更完善)。

  • 容器内用户权限不足:Flink容器默认以非root用户运行,在创建/tmp下的工作目录时可能没有足够权限。
    解决:临时以root用户启动容器测试:

    docker run \
            --rm \
            --name=jobmanager \
            --network flink-network \
            --publish 8081:8081 \
            --user root \
            flink:1.16.0-scala_2.12 jobmanager
    

    若测试有效,可通过修改Flink配置指定自定义工作目录,或构建自定义镜像调整用户权限。

  • 环境变量配置异常:命令中${FLINK_PROPERTIES}未提前定义,空值传入干扰Flink配置,影响工作目录创建逻辑。
    解决:先定义环境变量再启动,或直接移除该环境变量使用默认配置测试:

    docker run \
            --rm \
            --name=jobmanager \
            --network flink-network \
            --publish 8081:8081 \
            flink:1.16.0-scala_2.12 jobmanager
    
  • Docker临时目录挂载限制:Docker对容器内/tmp目录的挂载策略可能限制了子目录创建。
    解决:显式挂载本地目录到容器/tmp:

    docker run \
            --rm \
            --name=jobmanager \
            --network flink-network \
            --publish 8081:8081 \
            -v /tmp/flink-jm:/tmp \
            flink:1.16.0-scala_2.12 jobmanager
    

    注意提前在本地创建/tmp/flink-jm目录并确保权限正确。


内容的提问来源于stack exchange,提问作者pippa dupree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:55:19