Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何配置mariadb docker compose文件以使用3306以外的其他端口?_Docker_Docker Compose_Mariadb_Containers_Port - Fatal编程技术网

如何配置mariadb docker compose文件以使用3306以外的其他端口?

如何配置mariadb docker compose文件以使用3306以外的其他端口?,docker,docker-compose,mariadb,containers,port,Docker,Docker Compose,Mariadb,Containers,Port,我无法让mariadb在docker容器中使用docker compose文件运行3306以外的其他端口 我已经阅读了mariadb/docker文档,在线搜索并进行了自己的实验 docker编写文件: Dockerfile: 它从不使用端口33020。它仍然使用端口3306。如何在运行时通过docker compose文件动态传递端口?容器映像静态绑定到:3306。如果希望更改此设置,则需要构建新映像并将数据库配置为在其他位置运行 但是,Docker允许您将其映射(发布)为不同的端口:3302

我无法让mariadb在docker容器中使用docker compose文件运行3306以外的其他端口

我已经阅读了mariadb/docker文档,在线搜索并进行了自己的实验

  • docker编写文件:
  • Dockerfile:

  • 它从不使用端口33020。它仍然使用端口3306。如何在运行时通过docker compose文件动态传递端口?

    容器映像静态绑定到
    :3306
    。如果希望更改此设置,则需要构建新映像并将数据库配置为在其他位置运行

    但是,Docker允许您将其映射(发布)为不同的端口
    :33020

    正确的方法是:

    • docker compose
      MYSQL\u TCP\u端口=3306
    • docker compose
      端口:-“33020:3306”
    • Dockerfile
      公开3306
      (未更改)
    容器(内部)将正确引用
    :3306
    ,但外部(从主机)数据库将在
    :33020
    上公开


    NB在docker compose(网络)中,其他容器必须继续引用端口上的数据库
    :3306

    您需要替换默认的
    my.cnf
    来指定MariaDB/MySQL的自定义端口:

    cd/where/your/docker-compose.yml/locate
    docker run-it/cat/etc/mysql/my.cnf>my.cnf
    #使用任意文本编辑器打开my.cnf,搜索“port=3306”
    #并将其替换到您想要的端口。
    
    按如下方式配置docker-compose.yml:

    版本:“3.1”
    服务:
    db:
    图片:mariadb
    重新启动:始终
    卷数:
    -类型:绑定
    来源:./my.cnf
    目标:/etc/mysql/my.cnf
    环境:
    -MYSQL\u ROOT\u PASSWORD=mypassword
    #在此处添加其他配置
    
    您似乎必须通过修改my.cnf文件来修改端口。但这正是我试图解决的问题,在docker compose(网络)中,我需要其他容器来引用端口上的数据库,例如3320(3306除外)。此外,是否有其他创造性方法通过传递“-port=33020”来解决此问题但后来它抱怨要阅读文档以了解如何以root身份运行它,但这也不起作用,我得到了错误“无法打开和锁定特权表:表'mysql.host'不存在”,在线解决方案没有解决这个问题。示例(在Docker文件中):CMD mysld--user mysql--port=33020在
    :33020
    上向主机公开数据库的一个副作用是,您可以从其他容器通过此端口访问它,但可以通过主机而不是通过compose网络名(
    db
    )访问它。您最好更改希望数据库位于
    :33020上的容器的配置,或者——正如@philip tzou建议的那样,更改
    my.cnf
    端口
    设置)。
    version: '3.1'
    
    services:
    
      db:
        image: mariadb
        restart: always
        environment:
        - MYSQL_ROOT_PASSWORD=mypassword
        - MYSQL_TCP_PORT=33030
        - MYSQL_UNIX_PORT=33020
        ports:
        - "33020:33020"
    
    FROM: mariadb: 10.3.14
    COPY mydbscript.sql /docker-entrypoint-initdb.d/
    EXPOSE 33020
    CMD ["mysqld"]