当前位置: 首页 > 面试题库 >

docker-compose具有多个数据库

西门奇希
2023-03-14
问题内容

我试图弄清楚如何使用docker-compose.yml和2个从sql dump导入的数据库来实现docker。

httpd:
    container_name: webserver
    build: ./webserver/
    ports:
        - 80:80
    links:
        - mysql
        - mysql2
    volumes_from:
        - app

mysql:
    container_name: sqlserver
    image: mysql:latest
    ports:
        - 3306:3306
    volumes:
        - ./sqlserver:/docker-entrypoint-initdb.d
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: dbname1
        MYSQL_USER: dbuser
        MYSQL_PASSWORD: dbpass

mysql2:
    extends: mysql
    container_name: sqlserver2
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: dbname2
        MYSQL_USER: dbuser
        MYSQL_PASSWORD: dbpass

app:
    container_name: webdata
    image: php:latest
    volumes:
        - ../php:/var/www/html
    command: "true"

以上返回以下内容:

Kronos:mybuild avanche$ ./run.sh 
Creating sqlserver
Creating webdata
Creating sqlserver2

ERROR: for mysql2  driver failed programming external connectivity on endpoint sqlserver2 (6cae3dfe7997d3787a8d59a95c1b5164f7431041c1394128c14e5ae8efe647a8): Bind for 0.0.0.0:3306 failed: port is already allocated
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "compose/cli/main.py", line 63, in main
AttributeError: 'ProjectError' object has no attribute 'msg'
docker-compose returned -1

基本上,我试图在单个docker compose文件中获取整个堆栈设置,创建2个数据库并导入相应的sql转储。有人有什么建议吗?


问题答案:

就像其他可能对此有所了解的人的更新一样。

我通过删除解决了这个问题:

MYSQL_DATABASE: dbname

docker-compose.yml中 并将相关的create database语句直接添加到要传递到 docker-entrypoint-
initdb.d
的sql文件中。

在此阶段,sql命令是在root用户下执行的,因此您还需要添加一条语句,以向要使用的数据库用户授予相关权限。



 类似资料:
  • 问题内容: 我正在使用在3个不同的docker上运行的应用程序: 第一个是可通过REST API调用的服务器HTTP 第二个是rabbitmq 第三个是工人 整个应用程序使用 真的很简单:) 我想使其具有可伸缩性,并且独立于其他应用程序运行整个应用程序的多个实例(3个docker映像),然后放置一个负载平衡器,例如它将重定向到其中一个应用程序。 我看到我可以使用它,但是问题是可以缩放容器,但是我真

  • 问题内容: 文件,如下所示: 当我执行它时,出现以下错误: 据我所知,格式没有任何问题,例如缺少空格。我的总体目标是指定一个开发模式docker-compose文件,将其指向来自不同模块的目标目录。 我在这里做错了什么? 问题答案: 字面上几秒钟后找到了解决方案。您必须在“构建”之后删除“发现微服务”: 您也可以在上下文中使用“ ./”作为相对路径。:)

  • 问题内容: 我对使用Docker容器的最佳做法有疑问。 我开发的每个应用程序都需要一个数据库。现在我的问题是我应该使用一个带有多个数据库的mysql docker实例还是应该为每个数据库创建一个实例。我为每个数据库创建一个实例时看到的缺点是我无法拥有有权访问所有数据库的用户。我出于安全原因知道这是一个专家,但是当我尝试从客户端进行备份时,需要在每个实例中进行备份。而且不是多个实例占用大量资源(尽管

  • 我正在尝试设置Spring Boot以使用多个数据源。我已按照设置两个数据源的说明并将其中一个设置为主要数据源。 我有一个oracle的第二个配置类,它缺少@主注释,但非常相似。我还将其添加到我的主类中以排除数据源自动配置。 我面临的问题是,此设置不允许我的集成测试在H2数据库上运行以打开连接。。。 我正在使用一个单独的应用程序。src/integrationtest/resources下的属性文

  • 我想做这样的事情,我可以在以下代码中运行多个命令: 我如何执行多个命令? 谢了。

  • 问题内容: 我了解您可以使用scale命令来使用docker-compose来旋转多个容器。但是,它们都将具有相同的配置。 是否可以在同一主机上以同一配置(不同文件)启动容器的容器? 使用以下命令: 只有容器会运行,这不是我想要的。 - 编辑 - 当我尝试运行两个命令时,将发生以下情况。 我和这个样子的: 问题答案: 您需要做的就是更改项目名称。默认情况下,compose使用基于当前目录命名的项目