V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Rebron1900
V2EX  ›  Docker

docker 起的 MySQL 如何在其他容器里使用?

  •  
  •   Rebron1900 · 2023-12-15 17:44:52 +08:00 · 1873 次点击
    这是一个创建于 374 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我目前起了一个 MySQL ,一个 Ghost ,都是通过 docker-compose 文件拉的,目前是想在 Ghost 中使用 MySQL 容器提供的服务。

    我目前的尝试是通过 docker network create -d bridge mysql-net 创建了一个网络,然后分别在 MySQL 、Ghost 的配置文件中通过networks 项配置,但是 up 的时候提示 service "mysql" refers to undefined network mysql-net: invalid compose projec

    另外,我看很多都是把 MySQL 和主程序都写在一个 yml 文件里, 但是这样我就有个疑问,多个使用了 mysql 的服务,会产生资源浪费吗?

    20 条回复    2023-12-16 10:13:49 +08:00
    hefish
        1
    hefish  
       2023-12-15 17:47:07 +08:00
    把主机的 3306 映射进容器啊。。
    其他容器就连主机的 3306
    leadfast
        2
    leadfast  
       2023-12-15 17:50:05 +08:00
    docker-compose.yml 文件里
    ```
    app:
    networks: ['mysqlnet']

    networks:
    mysqlnet:
    external: true
    ```
    storyxc
        3
    storyxc  
       2023-12-15 18:00:13 +08:00
    把服务放到同一个 docker 网络里 或者映射了端口通过宿主机的端口访问
    zhangxudong
        4
    zhangxudong  
       2023-12-15 18:04:01 +08:00
    同一台机器,所有的容器共用一个 docker 网络
    不同机器,要么用 docker-swarm 组网,要么把 3306 映射到宿主机上,其他机器连宿主机的 ip
    julyclyde
        5
    julyclyde  
       2023-12-15 18:34:56 +08:00
    你有没有发现
    如果不用 docker ,这些问题你根本就不会遇到
    lovelylain
        6
    lovelylain  
       2023-12-15 18:42:32 +08:00 via Android
    @julyclyde 不用 docker-compose 就行
    julyclyde
        7
    julyclyde  
       2023-12-15 18:44:33 +08:00
    @lovelylain 按说 compose 也没多做啥事吧?只要(创建网络、把容器加入该网络)都做对了,应该和单独使用 docker 没什么区别啊

    不过得看版本,旧 compose 好像缺一些功能

    更简单的是根本别用
    A01514035
        8
    A01514035  
       2023-12-15 18:50:10 +08:00
    非常喜欢 docker compose 。这样不会忘记 docker run 的时候用了哪些参数了。
    至于你说的这个网络问题,我基本上都会指定网络,这样所有的服务都在同一个 docker 网络里了。
    ```yml
    version: '3.3'
    services:
    alist:
    restart: always
    volumes:
    - '/xxx/targz:/data'
    - '/xxxx/alist:/opt/alist/data'
    ports:
    - '4035:5244'
    container_name: alist
    image: 'xhofe/alist:latest'
    networks:
    - mynet # 指定网络
    networks:
    mynet:
    external: true
    ```
    lovelylain
        9
    lovelylain  
       2023-12-15 18:57:32 +08:00 via Android
    @julyclyde 学习成本高一些,OP 没用对
    julyclyde
        10
    julyclyde  
       2023-12-15 18:59:41 +08:00
    @lovelylain 主要是走弯路
    docker (及其附属工具)是一个值得单独一学的东西
    但是很多人都是在学其他东西的路上,看到文档说“我们提供了”于是就开始用,结果因为之前没好好学过,而遭遇了额外的麻烦,额外的麻烦!
    julyclyde
        11
    julyclyde  
       2023-12-15 19:00:20 +08:00
    @A01514035 你说的这个 compose 的好处,其实是 docker 本身的缺点
    容器包含的信息量还是略少,缺少运行时的内容,甚至可以认为只交付了文件系统压缩包而已
    chenqh
        12
    chenqh  
       2023-12-15 19:05:52 +08:00
    我记得好像可以不要 network,还是把 network 设置成 localhost 去了
    A01514035
        13
    A01514035  
       2023-12-15 19:11:10 +08:00
    是的,我现在所有 docker 运行的应用都是转换成 docker compose 来使用。借楼求一个 docker run 转 docker compose yml 的工具,composerize 有点难用,有时候会出错。
    rwecho
        14
    rwecho  
       2023-12-15 19:26:34 +08:00
    创建一个网络,可以在不同 docker-compose 访问
    oneisall8955
        15
    oneisall8955  
       2023-12-15 20:37:46 +08:00 via Android
    思路正确,姿势不对
    hs0000t
        16
    hs0000t  
       2023-12-15 20:40:22 +08:00 via Android
    @A01514035 扔给 chatgpt 就行了
    julyclyde
        17
    julyclyde  
       2023-12-15 20:40:51 +08:00
    @A01514035 前几天/t/996880 有讨论
    falcon05
        18
    falcon05  
       2023-12-15 20:49:26 +08:00 via iPhone
    mysql-net 设置 attachable 为 true

    其他的应用连接到 mysql-net 时设置 external 为 true
    BeautifulSoap
        19
    BeautifulSoap  
       2023-12-15 20:59:04 +08:00
    这帖子令人绷不住,2L 都基本把正确答案写出来了。。。。。
    Rebron1900
        20
    Rebron1900  
    OP
       2023-12-16 10:13:49 +08:00
    @falcon05 @leadfast 可以了,感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1175 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.