我正在运行一个Dockerfile
,但是,当我分配一个用于修改的变量时遇到问题/etc/fail2ban/jail.local
,其字符串内容为“PRIVATEIP”。
Dockerfile
产生错误并停止。因为我不知道分配一个变量sed
来修改特定文件中的字符串内容。
RUN IP=$(cat /root/ip_variable) | sed -i -r "s/PRIVATEIP/${IP}/g" /etc/fail2ban/jail.local
---> Running in 1e78ef4318ab
如果有任何替代方法可以处理此问题,请告诉我。
==================================================== ==========================
在 2018/7 月 11 日为以下替代方法添加更多说明:
我在 Dockerfile 上添加了一些命令行。目的和以前一样。我也可以使用 echo 编写如下脚本。但是,这很奇怪。为什么“sed”这个命令的“s”之后的同伴字符“/”会被遗漏?(如果有什么方法可以在代码输出中的字符上添加高光或标记,我感谢你。)如果这个问题解决了,我想我可以关闭这个问题。
Step 64/73 : RUN echo "#!/bin/bash\nexport PRIVATEIP=$(cat /home/ip_variable)\nsed -i -r \"s/\bPRIVATEIP\b/\${PRIVATEIP}/g\" /etc/fail2ban/jail.local\nsed -i -r \"s/\bPRIVATEIP\b/\${PRIVATEIP}/g\" /etc/opendkim/TrustedHosts" > /home/start_script.sh
---> Running in bbff59f82475
Removing intermediate container bbff59f82475
---> 0068d9d600ff
Step 65/73 : RUN cat /home/ip_variable
---> Running in faeb4bb1a6ba
172.17.0.2/16
Removing intermediate container faeb4bb1a6ba
---> f6cc35fd01e5
Step 66/73 : RUN cat /home/start_script.sh
---> Running in 95a5ef3b7d23
#!/bin/bash
export PRIVATEIP=172.17.0.2/16
sed -i -r "sPRIVATEI/${PRIVATEIP}/g" /etc/fail2ban/jail.local
sed -i -r "sPRIVATEI/${PRIVATEIP}/g" /etc/opendkim/TrustedHosts
Removing intermediate container 95a5ef3b7d23
---> 6720e7c01efc
Step 67/73 : RUN chmod 755 /home/start_script.sh
---> Running in d8ab5e04a846
Removing intermediate container d8ab5e04a846
---> decb9e147db9
Step 68/73 : RUN sh /home/start_script.sh
---> Running in fc86000f9a2f
sed: -e expression #1, char 28: unknown option to `s'
sed: -e expression #1, char 28: unknown option to `s'
The command '/bin/sh -c sh /home/start_script.sh' returned a non-zero code: 1