如何用Docker覆盖configuration文件

我有一个Docker项目,具有以下结构:

. ├── config └── Dockerfile 

Dockerfile位置

 FROM alpine:latest EXPOSE 8118 RUN apk --update add privoxy COPY config /etc/privoxy/config CMD ["privoxy", "--no-daemon"] 

config包含两行

 listen-address 0.0.0.0:8118 forward-socks5 / tor:9050 . 

在容器中,我想将Privoxyconfiguration文件(其默认位置是/etc/privoxy (参见https://www.privoxy.org/user-manual/config.html )放到“本地' config文件,这是我想要实现与COPY指令。

但是,如果我docker build --tag my_privoxy . 其次是docker run my_privoxy ,我看到以下错误信息:

 2017-05-02 10:40:29.371 7f2ce5f00b48 Info: Privoxy version 3.0.24 2017-05-02 10:40:29.371 7f2ce5f00b48 Info: Program name: privoxy 2017-05-02 10:40:29.371 7f2ce5f00b48 Fatal error: can't check configuration file '//config': Invalid argument 

我没有看到configuration文件的预期位置如何在容器中以'//config'结束; 在我看来,使用COPY与https://docs.docker.com/engine/reference/builder/#copy一致。 上面的Dockerfile什么问题?

/etc/privoxy/config一个目录? 如果没有,那么你的命令应该是这样的

 COPY config /etc/privoxy/ 

根据privoxy --help ,该命令接受一个[configfile]可选input。 所以我把最后一行改成了

 CMD ["privoxy", "--no-daemon", "/etc/privoxy/config"] 

它的工作。 (我仍然不明白为什么没有configuration文件input工作,因为/etc/privoxy/config应该是默认的)。

在容器中,我想制作Privoxyconfiguration文件

您可以使用所需的configuration将卷挂载到文件夹中。 这将与docker run -v hostFolder:containerFolder imagename 。 然而,这不会导致与configuration新的形象,而是你会得到一个容器与你想要的configuration。