【问题标题】:How can I configure these docker containers using a docker-compose.yml instead of a run command?如何使用 docker-compose.yml 而不是运行命令配置这些 docker 容器?
【发布时间】:2021-03-25 13:14:01
【问题描述】:

我有 2 个独立容器,我使用以下运行命令一次构建并运行它们:

Redis 容器:

docker run -v C:\Users\me\some_directory\redis.windows.conf:/redis- 
settings/redis.conf --name my_local_redis -p 6379:6379 redis gosu redis:redis 
redis-server /redis-settings/redis.conf

rabbitmq 容器:

docker run -d --hostname devlab --name rabbitmq-server -p 5672:5672 -p 15672:15672 rabbitmq:3-management

我查看了 docker-compose 文档,我可以看到如何在第一个运行命令中绑定挂载(运行命令中的 -v)相关目录,但是如何从 docker hub 拉取现有图像和通过 docker-compose yml 执行 gosu 命令?

任何帮助将不胜感激。

【问题讨论】:

    标签: docker redis docker-compose rabbitmq


    【解决方案1】:

    要从 docker hub 拉取图像,您只需在 compose 文件中使用 image 指令指定图像名称。要运行特定命令,请使用command

    但请注意,command 将覆盖您的 CMD,这意味着它将更改您的容器启动的进程。在 redis 的情况下,CMDredis-server。你可以使用command: gosu redis:redis redis-server ...

    所以它会是这样的:

    services: 
      my_local_redis:
        image: redis
        [...]
        ports: 
          - 6379:6379
        command: gosu redis:redis redis-server /redis-settings/redis.conf
    

    剩下的就交给你吧!

    【讨论】:

    • 感谢您为我指明了正确的方向,但是在使用 gosu 运行命令后出现以下错误:错误:exec:“&&”:$PATH 中找不到可执行文件。知道为什么这适用于 run 但不适用于 docker-compose yml?
    • 不带“&&”可以试试吗?
    • 你绝对应该在没有“&&”的情况下这样做,我改变了我的答案。我对 gosu 的工作方式有误。
    • command: 专门覆盖了 Dockerfile CMD,这与在 docker run image-name 之后传递命令相同。
    • 说得对,我写的很快。我更正了答案。
    猜你喜欢
    • 2020-06-25
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多