docker run 使用包含变量的 ENTRYPOINT

2024-04-21

我有一个私人 git 存储库github.com http://github.com我想自动化docker build过程使用Dockerfile。我天真地认为最好的地方Dockerfile位于我的存储库的根文件夹中。例子:

git clone ssh://[email protected] /cdn-cgi/l/email-protection/avilella/bioboxes_playground
cd bioboxes_playground
ls Dockerfile
Dockerfile

所以repo文件夹中的文件是:

[hpenvy15 bioboxes_playground] $ tree -Difts
.
[      18027 Mar  3 14:58]  ./LICENSE
[         22 Mar  3 14:58]  ./README.md
[        825 Mar  4 11:59]  ./Dockerfile
[       4096 Mar  4 11:59]  ./src
[         74 Mar  4 11:59]  ./src/hello_world.c

因此,对于外部依赖项,我使用以下命令安装它们apt-get install或下载 tar.gz 并在期间安装它们docker build.

我从上一个问题中发现如何将本地文件添加到图像(在 Dockerfile 中称为“上下文”):http://kimh.github.io/blog/en/docker/gotchas-in-writing-dockerfile-en/#add_and_understanding_context_in_dockerfile http://kimh.github.io/blog/en/docker/gotchas-in-writing-dockerfile-en/#add_and_understanding_context_in_dockerfile

我添加了一个简单的src/hello_world.c存储库中的示例,我想在期间进行编译docker build。见下文:

编辑:添加WORKDIR now

FROM debian:wheezy
MAINTAINER Foo Bar, [email protected] /cdn-cgi/l/email-protection

ENV ORG foo
ENV APP bar
ENV INSTALL_DIR /opt/${ORG}/${APP}

ENV PACKAGES wget binutils make csh g++ sed gawk perl zlib1g-dev 
RUN apt-get update -y && apt-get install -y --no-install-recommends ${PACKAGES}

ENV SEQTK https://github.com/avilella/seqtk/archive/sgdp.tar.gz

ENV THIRDPARTY_DIR ${INSTALL_DIR}/thirdparty

RUN mkdir -p ${THIRDPARTY_DIR}
RUN cd ${THIRDPARTY_DIR}

# SEQTK

RUN mkdir -p ${THIRDPARTY_DIR}/seqtk && cd ${THIRDPARTY_DIR}/seqtk &&\
    wget --quiet --no-check-certificate ${SEQTK} --output-document - |\
    tar xzf - --directory . --strip-components=1 && \
    make

# COMPILE HELLO_WORLD

ADD src/hello_world.c ${INSTALL_DIR}/hello_world.c

RUN gcc ${INSTALL_DIR}/hello_world.c -o ${INSTALL_DIR}/hello_world

WORKDIR ${INSTALL_DIR}
ENTRYPOINT ["./hello_world"]

我目前的问题是我定义的ENTRYPOINT不起作用 因为INSTALL_DIR是一个 ENV 变量。我可以将其硬编码为/opt/foo/bar/hello_world,然后它就起作用了:

$ sudo docker run -i foo                                                                                                                                  
exec: "./hello_world": stat ./hello_world: no such file or directory2015/03/04 15:43:37 Error response from daemon: Cannot start container cd39493be9f40a8714cbc1e503a1f172e2e5dc485881d0b5e34322fbb2f71380: exec: "./hello_world": stat ./hello_world: no such file or directory

这有效:

$ sudo docker run --entrypoint='/opt/foo/bar/hello_world' -i foo                                                                                          
Hello World

有什么想法可以让 ENTRYPOINT 在我的示例中起作用吗?


ENTRYPOINT不进行 ENV 替换,但是WORKDIR does http://docs.docker.com/reference/builder/#environment-replacement:

WORKDIR ${INSTALL_DIR}
ENTRYPOINT ./hello_world

但我想知道为什么你想将 INSTALL_DIR 作为变量?如果您没有使用容器,那么您应该这样做/opt/foo/bar and /opt/foo/baz and /opt/qux/bar都可以共存。但如果每一个都在一个单独的容器中,那么它们都可以生活在/opt/app.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker run 使用包含变量的 ENTRYPOINT 的相关文章

  • 是否可以对不同的服务使用不同的 .env?

    我遇到一种情况 最好有多个 env 文件 每个 env 文件对应 docker compose yml 中的每个服务 有什么方法可以指定要使用的不同文件名吗 这可以在个人服务层面上做到吗 我尝试使用env file不幸的是 这设置了在 Do
  • 无法在 docker 容器内安装 vim 或 nano

    尝试在 docker vim 或 nano 内安装 但我只得到这个 0 Connecting to archive ubuntu com 91 189 88 152 退出 docker 并执行ping archive ubuntu com我
  • 从 Dockerfile 写入 docker 卷不起作用

    请考虑以下 Dockerfile FROM phusion baseimage VOLUME data RUN touch data HELLO RUN ls ls data 问题 data 目录不包含 HELLO 文件 此外 任何其他写入
  • 如何在不重建镜像的情况下更新源代码

    我在 GitLab 上创建了一个新的存储库 在其中为我的 Angular 项目构建了一个 docker 镜像 现在我在本地对源代码做了一些修改 有没有办法可以更新 docker 映像而不重建它 None
  • 如何查看 docker build“RUN 命令”标准输出? (适用于 Windows 的 Docker)

    过去我可以简单地做这样的事情 Dockerfile FROM ubuntu RUN echo test 这会输出test到我的壳 我用它作为调试我的构建的一种方式 在 Windows 版 docker 的最新稳定版本中 构建输出看起来完全不
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • Dockerfile:在单行中设置多个环境变量

    我的印象是环境变量可以设置在一行上 如下所示 以尽量减少中间图像 FROM alpine 3 6 ENV RUBY MAJOR 2 4 RUBY VERSION 2 4 1 RUBY DOWNLOAD SHA256 4fc8a9992de3
  • 在容器中运行多个相似的进程有意义吗?

    提供有关该问题的背景的简要背景 目前 我和我的团队正在将微服务迁移到 k8s 以减少维护多个部署工具和管道的工作量 我们计划迁移的微服务之一是 ETL Worker 它监听 SQS 上的消息并执行多阶段处理 它是使用 PHP Laravel
  • 使用 Github 注册表中的 Docker 镜像未经授权

    我在本地创建了 Docker 镜像 将其标记为 Github Docker 注册表 将其推送到 Github Docker 注册表 现在我想在 Github 操作中使用它来创建 Docker 镜像FROM字段但它总是失败unauthoriz
  • mysql_upgrade 失败 - innodb 表不存在?

    我正在将 mysql 5 5 docker 容器数据库升级到 mysql 5 6 docker 容器 我能够解决所有其他问题 最后我的服务器运行的是 5 6 但是当我运行 mysql upgrade 时出现以下错误 ERROR root 1
  • 如何在 Docker for Windows 中设置共享驱动器?

    如何在 Docker for Windows 中设置共享驱动器 我正在使用最新版本 18 Stable 和 Edge 我的设置屏幕如下所示 它缺少一些选项 如共享驱动器 高级和网络 如第二张图片所示 为什么我缺少这些选项 My settin
  • 为 Docker 容器分配静态 IP

    我现在尝试在启动 Docker 容器时分配静态 IP 172 17 0 1 我使用端口 2122 作为该容器的 ssh 端口 以便让该容器监听端口 2122 sudo docker run i t p 2122 2122 ubuntu 此命
  • 在 Docker Compose 中更改 postgres 容器服务器端口

    我正在尝试使用 Docker compose 在远程服务器上部署第二个数据库容器 该 postgresql 服务器在端口 5433 上运行 而不是第一个 postgresql 容器使用的端口 5432 当我设置应用程序时 我收到以下错误输出
  • 在 Docker 中运行 Keycloak 时出错

    我试图在 Docker 中运行 Keycloak 但它抛出一个错误 这是泊坞窗文件 FROM jboss keycloak 4 1 0 Final WORKDIR opt jboss keycloak COPY realm export j
  • 如何从 docker-compose 链接到 Amazon RDS

    我的 docker compose yml 看起来像这样 django build user django links LINK TO AMAZON RDS command gunicorn sh env file config setti
  • 如何将新的 Kubernetes Minion 添加到当前集群

    我有一个运行在 3 台服务器上的 Kubernetes 集群 一台主服务器和 2 台服务器 我想添加另一个小黄人 是否可以添加 Minion 而无需再次进行完整安装 到目前为止 在寻找执行此操作的指南时 我只能找到有关建立整个集群的优秀指南
  • 列出 Docker 容器的卷

    如何列出 Docker 容器的所有卷 我知道它应该很容易获得 但我找不到如何获得 另外 是否可以获取已删除容器的卷并将其删除 您可以使用 docker ps 获取容器 id 并写入 docker检查container id 像这儿 Volu
  • 将当前目录复制到 docker 镜像

    构建 Docker 映像时 我需要将同一目录中的所有文件复制到 Docker 映像中 我尝试这样做 ADD HOME src RUN ls HOME src 但似乎不起作用 ls cannot access root src No such
  • Docker 日志中的 Python 异常标记为流:stdout

    我想解析和处理来自 docker 容器的所有错误 但当我期望 stderr 时 Python 异常标记为 stdout 举个简单的例子app py raise Exception 然后我在 docker 容器中运行这个文件 但在 var l
  • 如何获取本地文件系统上 docker 容器生成的内容(最小失败示例)

    这个问题是另一个问题的最小失败版本 如何获取本地文件系统上docker容器生成的内容 https stackoverflow com questions 34924011 how to get contents generated by a

随机推荐