Поскольку @Tomasz предлагает одно решение, которое также возможно,
Но прежде чем опубликовать свой ответ, я поделюсь нашим примером использования, почему мы это делаем.
мы сопоставляем каталог /data/
хоста во время создания с пустым каталогом контейнера /root/data/
, а затем копируем удаленный код из /home/tempdata/data/
в /root/data
контейнера, который переопределяет что-либо в каталоге монтирования, т.е. ~/data
хоста во время загрузки.
Таким образом, в результате пользователь получит последний код из контейнера для размещения каталога, что означает форму переопределения немного хитрого способа достижения противоположного случая.
docker build -t override .
docker run -it --rm --privileged -p 8081:8080 --name tt -v ~/data/:/root/data override
Вот Dockerfile, основанный на альпийском
FROM python:3.6-alpine
RUN mkdir -p /etc/supervisord.d
RUN apk add --no-cache supervisor git npm
# general config for supervisord
RUN echo $'[supervisord] \n\
[unix_http_server] \n\
file = /tmp/supervisor.sock \n\
chmod = 0777 \n\
chown= nobody:nogroup \n\
[supervisord] \n\
logfile = /tmp/supervisord.log \n\
logfile_maxbytes = 50MB \n\
logfile_backups=10 \n\
loglevel = info \n\
pidfile = /tmp/supervisord.pid \n\
nodaemon = true \n\
umask = 022 \n\
identifier = supervisor \n\
[supervisorctl] \n\
serverurl = unix:///tmp/supervisor.sock \n\
[rpcinterface:supervisor] \n\
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface \n\
[include] \n\
files = /etc/supervisord
# clone remote code so that can override local code of the user specified directory
RUN git clone https://github.com/IBM-Bluemix/bluemix-hello-node /home/tempdata/data/
# copy code from container directory to host mount directory
RUN echo $'#!/bin/ash \n\
echo "********************************8" \n\
mkdir -p /root/data/ \n\
mkdir -p /home/tempdata/ \n\
echo "*******Overiding /data/ of host machine ****" \n\
# this will override host machine files like if server.js modified on host this will overide with remote server.js
cp -r /home/tempdata/data/ /root/ \n\
cd /root/data/; npm i; npm start' >> /root/override.sh
RUN echo $'[supervisord] \n\
nodaemon=true \n\
[program:override] \n\
command=/root/override.sh \n\
stdout_logfile=/dev/fd/1 \n\
stdout_logfile_maxbytes=0MB \n\
stderr_logfile_maxbytes = 0 \n\
stderr_logfile=/dev/fd/2 \n\
redirect_stderr=true \n\
autorestart=false \n\
startretries=0 \n\
exitcodes=0 ' >> /etc/supervisord.d/override.conf
RUN chmod +x /root/override.sh
EXPOSE 8080
ENTRYPOINT ["supervisord", "--nodaemon", "--configuration", "/etc/supervisord.conf"]