Docker在启动容器上编写并执行命令

前端之家收集整理的这篇文章主要介绍了Docker在启动容器上编写并执行命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我试图了解docker compose中的COMMAND选项.在我当前的docker-compose.yml中,我启动了韵律泊坞窗映像(https://github.com/prosody/prosody-docker),我想在容器实际启动时创建一个用户列表.

容器的文档说明可以使用LOCAL,DOMAIN和PASSWORD环境选项创建用户,但这只是一个用户.我需要一个用户列表.

当阅读互联网上的一些东西时,似乎使用命令选项我应该能够在启动或运行容器中执行命令.

xmpp:
    image: prosody/prosody
    command: prosodyctl register testuser localhost testpassword
    ports:
        - "5222:5222"
        - "127.0.0.1:5347:5347"

但这似乎不起作用,我检查使用docker exec -it< imageid>运行容器bash但是没有创建用户.

是否可以使用docker-compose在已启动的容器上执行命令,还是有其他选项?

最佳答案
COMMAND指令与docker run命令结束时传递的指令完全相同,例如:echo“hello world”:

docker run debian echo "hello world"

该命令被解释为图像的ENTRYPOINT的参数,在debian的情况下是/ bin / bash.对于您的图像,它将传递给this script.查看该脚本,您的命令将被传递给shell.我希望您传递的任何命令都能成功运行,但是一旦命令完成,容器就会退出.请注意,默认命令在Dockerfile中设置为CMD [“prosodyctl”,“start”],这可能是启动服务器的长时间运行过程.

我不确定Prosody是如何工作的(甚至是它是什么),但我认为你可能想要在一个包含用户配置文件中映射,或者设置一个数据容器来保持你的配置.第一个解决方案意味着添加如下内容

volumes:
  - my_prosodoy_config:/etc/prosody

到docker-compose文件,其中my_prosody_config是一个包含配置文件的目录.

第二种解决方案可能涉及首先创建一个数据容器,如:

docker run -v /etc/prosody -v /var/log/prosody --name prosody-data prosody-docker echo "Prosody Data Container"

(回应应该完成,留下一个已经停止的容器,其中包含为配置和日志设置的卷.请确保您不会意外停靠此容器!)

然后在docker-compose文件添加

volumes_from:
   - prosody-data

希望您可以像以前一样通过运行docker exec来添加用户,然后在命令行运行prosodyctl register.但这取决于韵律和图像的表现.

猜你在找的Docker相关文章