docker - 如何运行CKAN泊坞镜像?

标签 docker docker-compose ckan

我已经尝试了几天,以将CKAN作为docker镜像运行。官方CKAN documentation详细说明了如何通过“docker-compose”创建自己的docker镜像。基本工作流程是:

  • 从GitHub克隆CKAN源文件
  • 在“docker-compose.yml”文件中进行一些更改(自定义密码,扩展名等)
  • 运行“docker-compose”

  • 这为您提供了一个正在运行的CKAN docker容器以及所有必要的数据库和搜索引擎。
    但是,我的最终目标是将该CKAN docker镜像推送到Docker-Hub并通过“docker run”在其他计算机上运行。我想使用此方法,因为我想广泛修改原始CKAN安装,并在将其推送到docker hub之前,还将自定义数据集,组和组织添加到正在运行的目录中。与使用“Docker compose”相比,“Docker run”似乎更加容易和方便。
    问题是:每当我尝试使用以下命令运行CKAN容器时,都会出现以下错误:
    $ docker run -d --name db ckan/postgresql
    $ docker run -d --name solr ckan/solr
    $ docker run -d -p 80:80 --link db:db --link solr:solr ckan/ckan
    
    ERROR: no CKAN_SQLALCHEMY_URL specified in docker-compose.yml
    
    CKAN_SQLALCHEMY_URL肯定存在于docker-compose.yml文件中。在Windows中将此变量设置为全局PATH变量也无济于事。我还尝试了不同版本的CKAN源代码。由于CKAN documentation仅说明如何使用“docker-compose”,而不说明如何使用“docker run”,因此我怀疑“docker run”根本不可能。如果是这样,为什么在Docker Hub上有官方的CKAN image? (这会引发与我自己使用“docker-compose”构建镜像完全相同的错误。)如果无法使用此镜像,它在Docker Hub上的用途是什么?
    生成CKAN镜像后,是否有任何方法可以“docker run”它?
    谢谢!
    编辑:以下是我的CKAN docker-compose.yml文件。 (变量存储在.env文件中)
    # docker-compose build && docker-compose up -d
    # If "docker-compose logs ckan" shows DB not ready, run "docker-compose restart ckan" a few times.
    version: "3"
    
    volumes:
      ckan_config:
      ckan_home:
      ckan_storage:
      pg_data:
    
    services:
      ckan:
        container_name: ckan
        build:
          context: ../../
          args:
              - CKAN_SITE_URL=${CKAN_SITE_URL}
        links:
          - db
          - solr
          - redis
        ports:
          - "0.0.0.0:${CKAN_PORT}:5000"
        environment:
          # Defaults work with linked containers, change to use own Postgres, SolR, Redis or Datapusher
          - CKAN_SQLALCHEMY_URL=postgresql://ckan:${POSTGRES_PASSWORD}@db/ckan
          - CKAN_DATASTORE_WRITE_URL=postgresql://ckan:${POSTGRES_PASSWORD}@db/datastore
          - CKAN_DATASTORE_READ_URL=postgresql://datastore_ro:${DATASTORE_READONLY_PASSWORD}@db/datastore
          - CKAN_SOLR_URL=http://solr:8983/solr/ckan
          - CKAN_REDIS_URL=redis://redis:6379/1
          - CKAN_DATAPUSHER_URL=http://datapusher:8800
          - CKAN_SITE_URL=${CKAN_SITE_URL}
          - CKAN_MAX_UPLOAD_SIZE_MB=${CKAN_MAX_UPLOAD_SIZE_MB}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - DS_RO_PASS=${DATASTORE_READONLY_PASSWORD}
    
        volumes:
          - ckan_config:/etc/ckan
          - ckan_home:/usr/lib/ckan
          - ckan_storage:/var/lib/ckan
    
      datapusher:
        container_name: datapusher
        image: clementmouchet/datapusher
        ports:
          - "8800:8800"
    
      db:
        container_name: db
        build:
          context: ../../
          dockerfile: contrib/docker/postgresql/Dockerfile
          args:
            - DS_RO_PASS=${DATASTORE_READONLY_PASSWORD}
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
        environment:
          - DS_RO_PASS=${DATASTORE_READONLY_PASSWORD}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
        volumes:
          - pg_data:/var/lib/postgresql/data
    
      solr:
        container_name: solr
        build:
          context: ../../
          dockerfile: contrib/docker/solr/Dockerfile
    
    
      redis:
        container_name: redis
        image: redis:latest
    

    最佳答案

    如果要从docker运行它,则将它作为docker compose命令运行,则需要拆分docker文件并从.env文件发送一些参数,例如错误消息:未发送SQL_ALCHEMY。
    我建议将其作为docker compose执行。然后,从docker compose构建之后,您就可以执行docker run并发送缺少的参数,例如SQL_ALCHEMY。

    关于docker - 如何运行CKAN泊坞镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64005263/

    相关文章:

    docker - 最佳实践 - 在一个 repo 中有多个 docker-compose 文件

    ckan - CKAN 在哪里存储推送到数据存储/文件存储的文件?

    python - 创建数据库表时出错 - CKAN

    java - 将ckan许可证添加到从java上传的文件中

    Docker - 如何将新的 python 依赖项添加到现有的 docker 镜像?

    java - Maven 集成测试 2 个模块

    mysql - 使用 docker-compose 连接 Tomcat 容器和 Mysql 容器

    docker - docker compose 中未设置主机名

    git - 如何将本地机器的 SSH key 传递给 docker 容器?

    shell - 在jenkins中执行docker命令(在docker容器中)