Docker编写并执行启动容器的命令
我正试图了解docker compose中的命令选项。在我当前的docker-compose.yml中,我启动prosody docker image(),并希望在容器实际启动时创建一个用户列表 容器的文档说明可以使用环境选项Docker编写并执行启动容器的命令,docker,boot2docker,Docker,Boot2docker,我正试图了解docker compose中的命令选项。在我当前的docker-compose.yml中,我启动prosody docker image(),并希望在容器实际启动时创建一个用户列表 容器的文档说明可以使用环境选项本地、域和密码创建用户,但这是单个用户。我需要一个用户列表 当在互联网上阅读一些东西时,似乎使用命令选项我应该能够在启动或运行的容器中执行命令 xmpp: image: prosody/prosody command: prosodyctl register
本地、域和密码创建用户,但这是单个用户。我需要一个用户列表
当在互联网上阅读一些东西时,似乎使用命令选项我应该能够在启动或运行的容器中执行命令
xmpp:
image: prosody/prosody
command: prosodyctl register testuser localhost testpassword
ports:
- "5222:5222"
- "127.0.0.1:5347:5347"
但这似乎不起作用,我使用docker exec-it bash检查了正在运行的容器,但没有创建用户
是否可以使用docker compose在已启动的容器上执行命令,或者是否有其他选项?该命令
指令与在docker run
命令结束时传递的指令完全相同,例如echo“hello world”
:
docker run debian echo "hello world"
该命令被解释为图像的入口点
的参数,在debian的例子中是/bin/bash
。对于您的图像,它会传递给。查看该脚本,您的命令将被传递到shell。我希望您传递的任何命令都能成功运行,但一旦您的命令完成,容器将退出。请注意,Dockerfile中的默认命令设置为CMD[“prosodyctl”,“start”]
,这可能是一个启动服务器的长时间运行的进程
我不确定Prosody是如何工作的(甚至不知道它是什么),但我认为您可能希望映射到保存用户的配置文件中,或者设置一个数据容器来保存配置。第一种解决方案意味着添加如下内容:
volumes:
- my_prosodoy_config:/etc/prosody
对于docker compose文件,其中my_prosody\u config
是保存配置文件的目录
第二种解决方案可能涉及首先创建一个数据容器,如:
docker run -v /etc/prosody -v /var/log/prosody --name prosody-data prosody-docker echo "Prosody Data Container"
(回显应完成,留下一个已停止的容器,该容器已为配置和日志设置了卷。请确保您不会意外地docker rm
此容器!)
然后在docker compose文件中添加:
volumes_from:
- prosody-data
希望您可以像以前一样运行docker exec
,然后在命令行上运行prosodyctl register
来添加用户。但这取决于韵律和图像的行为。CMD
与Docker中的入口点直接相关(有关解释,请参见问题)。因此,在更改其中一个时,您还必须检查这对另一个的影响。如果查看,您将看到默认命令是通过CMD[“prosodyctl”,“start”]
启动韵律。正如Adrian提到的,只需传递这个命令。但是,您的命令会覆盖默认命令,因此您的韵律恶魔永远不会启动。也许你想试试像这样的东西
xmpp:
image: prosody/prosody
command: sh -c prosodyctl register testuser localhost testpassword && prosodyctl start
ports:
- "5222:5222"
- "127.0.0.1:5347:5347"
xmpp:
image: prosody/prosody
environment:
- LOCAL=testuser
- DOMAIN=localhost
- PASSWORD=testpassword
ports:
- "5222:5222"
- "127.0.0.1:5347:5347"
相反。更优雅,而且不知何故,创造者似乎有意(从entrypoint.sh脚本判断)将是这样的
xmpp:
image: prosody/prosody
command: sh -c prosodyctl register testuser localhost testpassword && prosodyctl start
ports:
- "5222:5222"
- "127.0.0.1:5347:5347"
xmpp:
image: prosody/prosody
environment:
- LOCAL=testuser
- DOMAIN=localhost
- PASSWORD=testpassword
ports:
- "5222:5222"
- "127.0.0.1:5347:5347"
回答最后一个问题:不,不可能(到目前为止)通过docker compose在正在运行的容器上执行命令。但是,您可以使用docker轻松做到这一点:
docker exec -i prosody_container_name prosodyctl register testuser localhost testpassword
其中prosody\u container\u name
是正在运行的容器的名称(使用docker ps
列出正在运行的容器)。命令选项覆盖docker容器中的默认命令,因此它不能用于您想要的内容。也许您可以创建一个脚本,首先使用docker compose start
启动您的环境,然后使用docker exec prosodyctl register…
在该容器中创建用户?