bash - Dockerfile不会替换文本,但是命令行会替换文本,可能是错误?

标签 bash docker sed dockerfile

我有一个简单的Dockerfile,它复制了一个模板,该模板使用sed替换了一些变量。非常简单。看起来非常可行,从我所见/读到的所有意图和目的来看,它都应该做到。

COPY /my-dir/my-textfile.conf /to/my/docker/path.conf
RUN sed -i s:TEXTTOREPLACE:my-new-text:g /to/my/docker/path.conf

然后我先运行docker build....,然后再运行docker run ... bash然后我cat我的文件,并且TEXTTOREPLACE仍然在那里。

在bash中运行相同的sed命令,它没有问题。

有什么想法吗?我在做什么错/看不到?

谢谢!
按请求进行编辑:基础图像为debian:7.11,工作站为MAC OSX

最佳答案

只是回顾一下。

  • 我的工作目录中有my-textfile.conf文件。它的内容是:

  • I need to change TEXTTOREPLACE with my-new-text


  • 我的测试系统是运行Docker版本18.09.0的Ubuntu Linux 16.04,构建
    4d60db4。
  • 这是Dockerfile
  • FROM debian:7.11 COPY my-textfile.conf /tmp/path.conf RUN sed -i s:TEXTTOREPLACE:my-new-text:g /tmp/path.conf
    我运行以下命令:
    docker build -t mytestimage .
    docker run -ti -d --name mytestcontainer mytestimage
    docker exec -ti mytestcontainer /bin/bash
    

    然后,在容器内,运行:
    cat /tmp/path.conf
    

    我得到这个结果:

    I need to change my-new-text with my-new-text



    因此,它似乎按预期工作。

    关于bash - Dockerfile不会替换文本,但是命令行会替换文本,可能是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53770835/

    相关文章:

    bash - shell 脚本 : replace contents

    linux - 格式化文本并在特定模式之间添加文本部分

    linux - 用于隔离文件中单词的 Bash 脚本

    bash - 如何使函数只读

    mysql - 使用docker-compose无法在同一网络中连接mysql和spring boot

    mysql - Azure 多容器 Web 应用程序明显无缘无故地停止了该站点

    sed - 修剪文本文件中一行的第一个和最后一个字符的命令

    linux - Bash Script 添加、删除、用户、目录和文件

    bash - 计算所有子目录unix中的总目录和文件

    docker - 为什么具有Elasticsearch状态的Docker镜像始终重新启动?