【问题标题】:ansible docker postgres volumeansible docker postgres 卷
【发布时间】:2017-09-18 19:53:57
【问题描述】:

我正在 aws 中使用 docker、ansible 和 terraform 进行一些 postgres 部署

事情进展得比较顺利,我使用 terraform 启动实例,使用 ansible 使用 docker 配置实例,也使用 ansible 启动我的 postgres 容器,并将 ebs 卷附加到我的实例,我打算将其用作主要数据存储。

但我对如何将卷附加到 docker(而不是实例,因为我可以使用 terraform 做到这一点)感到困惑

我想可以使用 ansible 或修改 dockerfile,但似乎是答案的“volume”文档对我来说并不那么清楚。

所以如果我有这样的 ansible playbook:

name: Start postgis
docker_container:
name: postgis
image: "{{ ecr_url }}"    
network_mode: bridge
exposed_ports:
  5432
published_ports:
  5432:5432
state: started

如何指定用于 Postgres 数据存储的 ebs 卷?

resource "aws_volume_attachment" "ebs-volume-postgis-attach" {
device_name = "/dev/xvdh"
volume_id = "${aws_ebs_volume.ebs-volume-postgis.id}"
instance_id = "${aws_instance.postgis.id}"
}

这是用于附加 ebs 卷的代码,以防有人感兴趣

请询问您需要的任何类型的信息,所有帮助都非常感谢

【问题讨论】:

    标签: postgresql amazon-web-services docker ansible infrastructure


    【解决方案1】:

    这是一个清单:

    1. 将 EBS 卷(磁盘)附加到 EC2 实例(例如 /dev/xvdh

    2. 制作分区(可选)(例如/dev/xvdh1

    3. 在分区/磁盘上创建文件系统

    4. 在您的 EC2 实例中挂载文件系统(例如 /opt/ebs_data

    5. 使用卷启动 Docker 容器(例如 /opt/ebs_data:/var/lib/postgresql/data

    在 Ansible 的 docker_container 模块中,volumes 是一个列表,所以:

    - docker_container:
        name: postgis
        image: "{{ ecr_url }}"    
        network_mode: bridge
        exposed_ports:
          - 5432
        published_ports:
          - 5432:5432
        state: started
        volumes:
          - /opt/ebs_data:/var/lib/postgresql/data
    

    【讨论】:

    • 非常感谢,我错过了“制作文件系统”步骤,一个简单的问题:定义卷是:“ebs_storage_path:postgres_data_dir”正确吗?
    • 好吧,现在可以了,一个细节:如果你使用挂载卷的根目录作为目录,它不起作用,你必须使用一些子目录(例如:/opt/ebs_data/postgres),我相信在你的回答中值得一提
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2019-08-12
    • 2019-02-12
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多