背景
我已经构建了一个npm服务器(sinopia)docker镜像(https://github.com/feuyeux/docker-atue/blob/master/docker-images/feuyeux_sinopia.md),并且在CMD行中,每次生成容器时它都会运行start.sh。
CMD ["/opt/sinopia/start.sh"]
此shell将动态创建一个yaml文件。
sed -e 's/\#listen\: localhost/listen\: 0.0.0.0/' -e 's/allow_publish\: admin/allow_publish\: all/' /tmp/config.yaml > /opt/sinopia/config.yaml
问题
我希望我可以在容器运行时编辑这个config.yaml,因为我希望内容应该按需更改。
如上所示,第一行运行 sinopia 容器,在此容器中有/opt/sinopia/config.yaml。但我不知道如何获取此运行容器并编辑和检查此文件。 如果我按照 sinopia-ls 的行进行操作,则会运行一个新容器,而不是之前运行的容器。
谢谢你们!
回答(详情请见下面我接受的内容)
sudo nsenter --target $PID --mount --uts --ipc --net --pid
root@58075317e47d:/# ls /opt/sinopia/
config.yaml config_gen.js start.sh storage
root@58075317e47d:/# cat /opt/sinopia/config.yaml
答案 0 :(得分:11)
使用docker 1.3,有一个新命令docker exec
。这允许您输入正在运行的泊坞窗:
docker exec -it <container-id> bash
答案 1 :(得分:2)
您为容器命名,因此您可以使用该名称找到它。
然后使用nsenter(man nsenter)发送您想要执行的命令。
nsenter --target $$(docker inspect --format {{.State.Pid}} <container_name_or_ID>) --mount --uts --ipc --net --pid <cmd>
有关如何在正在运行的容器内写入的更多信息和解决方案:If you run SSHD in your Docker containers, you're doing it wrong!
答案 2 :(得分:0)
您只需要使用-v作为选项挂载文件夹。我举个例子
假设我有/home/awan/config.yml
&lt; ---这个文件总是动态的,不能把它放在容器里
我运行我的容器,以便我可以将该文件夹安装到我的容器中
#sudo docker run -i -t -v /home/awan:/home/ubuntu/awan ubuntu/14.04 /bin/bash
config.yml
中修改/home/awan/config.yml
中您自动应用于Docker容器(/home/ubuntu/awan/config.yml
)中的所有更改,因为您已将其挂载