【发布时间】:2020-04-27 06:32:38
【问题描述】:
我正在创建一个 Docker 映像,我在其中使用 sed 修改两个参数,但是当我创建映像并检查我想要修改的文件时,它仍然是相同的。如果我以交互方式运行 sed 命令,它就可以工作。为什么? sombebody 可以帮助我制作 ma 图像,而无需修改每个容器。
Dockerfile
FROM python:slim-buster
WORKDIR /home/scr_dca
COPY . .
ENV FLASK_APP Screenly.py
RUN apt-get update && \
apt install curl gnupg -y && \
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list && \
apt-get update && ACCEPT_EULA=Y apt-get install msodbcsql17 unixodbc-dev -y && \
apt-get install libgssapi-krb5-2 g++ gcc && \
pip3 install -r requirements.txt --trusted-host pypi.python.org
RUN sed -i "s/\(MinProtocol *= *\).*/\1TLSv1.0 /" "/etc/ssl/openssl.cnf" && \
sed -i "s/\(CipherString *= *\).*/\1DEFAULT@SECLEVEL=1 /" "/etc/ssl/openssl.cnf"
CMD ["gunicorn", "-b", ":8000", "scr_dca:app"]
我在做
docker run --name mycontainer -d -p 5050:8000 src_dca_v1.0
docker container exec -it mycontainer bash
:/home/myapp# cat /etc/ssl/openssl.cnf
我在图像创建过程中检查并 sed 没有工作,所以我运行了以下命令:
sed -i "s/\(MinProtocol *= *\).*/\1TLSv1.0 /" "/etc/ssl/openssl.cnf"
sed -i "s/\(CipherString *= *\).*/\1DEFAULT@SECLEVEL=1 /" "/etc/ssl/openssl.cnf"
我要修改的文件的原始部分:
[system_default_sect]
MinProtocol = TLSv1.2
CipherString = @SECLEVEL=1
sed 预期结果
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
【问题讨论】:
-
您可以尝试在两次
sed操作之后将cat /etc/ssl/openssl.cnf添加到Dockerfile 中。然后我们可以看看sed此时是否确实有效,但稍后会出现问题。 -
感谢@bellackn 的建议,调试和发现问题很有用。
标签: bash image docker sed dockerfile