您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何在Docker构建过程中使用环境变量来获取脚本?

如何在Docker构建过程中使用环境变量来获取脚本?

每个DockerfileRUN步骤都运行一个新的容器和一个新的shell。如果尝试在一个shell中设置环境变量,则以后将看不到该变量。例如,您可以尝试以下Dockerfile:

FROM busy@R_900_2419@
ENV FOO=foo1
RUN export FOO=foo2
RUN export BAR=bar
CMD echo FOO is $FOO, BAR is $BAR
# Prints "FOO is foo1, BAR is "

有三个好的解决方案。从最容易/最好到最难/最复杂:

将软件安装到“系统”位置,例如/usr; 无论如何,它将被隔离在Docker映像中。(不要使用其他隔离工具(例如Python虚拟环境)或版本管理器(例如nvmrvm;),只需安装所需的特定工具即可。)

起作用:

        FROM busy@R_900_2419@
    ENV FOO=foo2
    ENV BAR=bar
    CMD echo FOO is $FOO, BAR is $BAR
    # Prints "FOO is foo2, BAR is bar"
        #!/bin/sh
    # Read in the file of environment settings
    . /opt/wherever/env
    # Then run the CMD
    exec "$@"

COPY将此脚本放入您的Dockerfile中。使之成为ENTRYPOINT; 使它CMD成为您实际正在运行的东西。

        FROM busy@R_900_2419@
    WORKDIR /app
    COPY entrypoint.sh .
    COPY more_stuff .
    ENTRYPOINT ["/app/entrypoint.sh"]
    CMD ["/app/more_stuff/my_app"]

如果你关心这样的事情,环境变量,你通过这种方式设置将不可见docker inspectdocker exec调试环境; 但是,如果您dockerrun-it...sh将它们可见。这是一个有用且足够重要的模式,CMD除非我专门尝试进行此类初次设置,否则我几乎总是在Dockerfile中使用它。

其他 2022/1/1 18:17:35 有417人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶