【问题标题】:How to execute commands while running this docker container?如何在运行这个 docker 容器时执行命令?
【发布时间】:2020-10-15 18:52:21
【问题描述】:

我想提取 docker postgres 图像并在其中创建一个数据库mydb。我可以像这样一步一步地做到这一点

  1. docker run -d -p 5432:5432 --name containername -e POSTGRES_PASSWORD=password -d postgres:12.1

  2. docker exec -it containername /bin/bash

  3. psql -h localhost -U postgres

  4. CREATE database mydb;

我想在自述文件中添加这些步骤。运行容器本身时,是否可以在单个命令中完成所有操作? 尝试了类似下面的方法但无法成功

docker run -d -p 5432:5432 --name terminals -e POSTGRES_PASSWORD=password -d postgres:12.1 psql -h localhost -U postgres; create database terminals

【问题讨论】:

  • 你真的看过图片description and documentation(寻找标题“如何扩展这个图片”)?因为您可以在容器启动时自动执行此操作,基本上是通过设置一些环境变量或在容器内挂载文件。
  • 嗨,安装脚本会再次使其成为一个多步骤过程。
  • 除非您使用已经存在的脚本分发自己的扩展图像。或者您分发文件并在命令行上使用-v 选项给出安装它的说明。或者分发一个 dockerfie 和脚本,让这个人构建自己的图像并启动它。如您所见,有很多选择。

标签: postgresql docker containers docker-exec


【解决方案1】:

您可以将初始化脚本挂载到容器中:

docker run -d -v /local-path/your-init.sql:/docker-entrypoint-initdb.d/your-init.sql -p 5432:5432 --name containername -e POSTGRES_PASSWORD=password postgres:12.1

你的init.sql:

CREATE database mydb;

【讨论】:

    【解决方案2】:

    Postgres 官方 docker 镜像(如您当前使用的 postgres:12.1)附带一个 docker-entrypoint.sh 脚本,该脚本能够基于环境变量初始化数据库(@Zeitounator 也提到了documentation)。 因此,为了在启动时启动 postgres 并启动数据库,您需要在运行映像时添加一个额外的环境变量 (POSTGRES_DB=mydb):

    docker run -d -p 5432:5432 --name containername -e POSTGRES_PASSWORD=password -e POSTGRES_DB=mydb -d postgres:12.1
    

    【讨论】:

      猜你喜欢
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2019-05-21
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      相关资源
      最近更新 更多