Docker compose dockerfile运行echo多行和带变量

Docker compose dockerfile运行echo多行和带变量,docker-compose,dockerfile,Docker Compose,Dockerfile,我的Dockerfile里有这样的东西 docker-compose.yml version: '3.7' services: backuppc-app: image: tiredofit/backuppc container_name: backuppc-app build: context: . dockerfile: ./Dockerfile volumes: - /mnt/TOSHIBA-BACKUP/back

我的Dockerfile里有这样的东西

docker-compose.yml

version: '3.7'
services:   
  backuppc-app:
    image: tiredofit/backuppc
    container_name: backuppc-app
    build:
      context: .
      dockerfile: ./Dockerfile
    volumes:
      - /mnt/TOSHIBA-BACKUP/backuppc/data:/var/lib/backuppc
      - /mnt/TOSHIBA-BACKUP/backuppc/conf/etc/:/etc/backuppc
      - /mnt/TOSHIBA-BACKUP/backuppc/conf/home/:/home/backuppc
    ports:
      - "8081:80"
      - "8082:10050"
    environment:
      - BACKUPPC_UUID=1000
      - BACKUPPC_GUID=1000
      - SMTP_HOSTNAME=${SMTP_HOSTNAME}
      - SMTP_PORT=${SMTP_PORT}
      - SMTP_USERNAME=${SMTP_USERNAME}
      - SMTP_PASSWORD=${SMTP_PASSWORD}
    restart: always
温顺的

FROM tiredofit/backuppc

RUN echo $'defaults \n\
auth on \n\
tls on \n\
account gmail \n\
host $SMTP_HOSTNAME \n\
port $SMTP_PORT \n\
user $SMTP_USERNAME \n\
from $SMTP_USERNAME \n\
password $SMTP_PASSWORD \n\
account default : gmail \n' > /root/.msmtprc
正在签入未计算的/root/.msmtprc变量。。尝试了许多测试。。使用${VAR_NAME}不起作用。使用双引号计算变量,但不返回回车

另外,当我尝试将该字符串写入/home/backuppc/.msmtpc文件时,不会覆盖该字符串

-rw-r--r--    1 root     backuppc       200 Jan 17 11:19 .msmtprc

要解决shell在使用双引号时忽略了\n而使用单引号不执行变量展开的问题,可以创建一个变量来保存换行符,并将其展开到由双引号包围的字符串中

以下方面应起作用:

RUN nl=$'\n' && echo "\
foobar $nl\
$YOUR_VAR $nl\
hello world" > file.txt
在构建图像之后,您应该拥有文件的内容以及您想要的换行符

添加@blami的注释后,您应该将这些变量作为参数传递给docker compose中的
build
部分,并在docker文件中声明它们,然后再将它们与
ARG var_name
一起使用,就像他发布的链接建议的那样

最后,您应该有一个Dockerfile,类似于:

FROM tiredofit/backuppc

ARG YOUR_VAR

RUN nl=$'\n' && echo "\
first line $nl\
$YOUR_VAR $nl\
third line " > file.txt
你现在可以试着跑了

> docker build . -t test --build-arg YOUR_VAR="second line"
> docker run test cat file.txt
然后得到类似于

first line
second line
third line
至于docker compose,我还没有真正尝试过,但我认为它应该是这样的:

version: '3.7'
services:   
  backuppc-app:
    container_name: backuppc-app
    image: tiredofit/backuppc
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
         - YOUR_VAR=${YOUR_VAR}
...

假设您已经设置了YOUR_VAR环境变量。

这是否回答了您的问题?嗯,没有work@AugustoMurri我已经更新了我的答案。你试过了吗?我从同一个图像和docker build/docker run way开始使用docker文件,但没有尝试完整的案例。