3

背景

我已经构建了一个 npm 服务器(sinopia) docker 映像(https://github.com/feuyeux/docker-atue/blob/master/docker-images/feuyeux_sinopia.md),并且在 CMD 行中,它将运行启动.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
4

3 回答 3

12

在 docker 1.3 中,有一个新命令docker exec。这允许您输入正在运行的 docker:

docker exec -it <container-id> bash
于 2014-10-24T14:51:37.563 回答
2

您命名了您的容器,因此您可以使用该名称找到它。

然后使用 nsenter ( man nsenter ) 发送您想要执行的命令。

nsenter --target $$(docker inspect --format {{.State.Pid}} <container_name_or_ID>) --mount --uts --ipc --net --pid <cmd>

有关如何在正在运行的容器中编写的更多信息和解决方案:如果您在 Docker 容器中运行 SSHD,那么您做错了!

于 2014-08-22T13:46:56.163 回答
0

您只需要使用 -v 作为选项安装文件夹。我举个例子

  1. 假设我有/home/awan/config.yml<---这个文件总是动态的,不能把它放在容器里

  2. 我运行我的容器,所以我可以将该文件夹安装到我的容器中

#sudo docker run -i -t -v /home/awan:/home/ubuntu/awan ubuntu/14.04 /bin/bash

  1. 之后,您只需config.yml在您/home/awan/config.yml应用的所有更改中进行/home/ubuntu/awan/config.yml编辑
于 2015-01-19T08:34:54.500 回答