如何连接到不同docker堆栈中运行的服务?

时间:2018-05-10 07:04:36

标签: php docker docker-compose docker-swarm docker-swarm-mode

在两个不同的docker堆栈中运行的服务可以通信吗?

这是我尝试过但无法实现的目标。

  1. 创建一个运行nginx和php-fpm的堆栈( stack1 ),运行良好。
  2. 创建另一个运行mysql数据库的堆栈( stack2
  3. 现在我想让stack1服务能够与stack2通信,以便它可以访问数据库服务。
  4.   

    我虽然这可能会有所帮助并创建一个外部网络并尝试   将stack1和stack2中的服务添加到它,以便它们可以   也是彼此沟通

    Mystack1 docker-compose file

    version: "3.4"
    networks:
        apps-net:
        db-net:
            external:
                name: db-net
    services:
        web:
            image: nginx:latest
            ports:
                - "9080:80"
            volumes:
                - ./code:/code
                - ./site.conf:/etc/nginx/conf.d/default.conf
    
            depends_on:
                - php
            networks:
                - apps-net
                - db-net
    
            deploy:
                mode: replicated
                replicas: 1
        php:
            image: php:7-fpm
            volumes:
                - ./code:/code
            networks:
                - apps-net
                - db-net
            deploy:
                mode: replicated
                replicas: 1
    

    我的stack2 docker-compose文件

    version: '3.3'
    networks:
        db-net:
            external:
                name: db-net
    
    services:
        db:
            image: mysql:5.7
            volumes:
                - db_data:/var/lib/mysql
            restart: always
            environment:
                MYSQL_ROOT_PASSWORD: password
                MYSQL_DATABASE: wordpress
                MYSQL_USER: root
                MYSQL_PASSWORD: password
            networks:
                - db-net
    
    volumes:
        db_data:
    

    我使用docker network create db-net命令

    创建了一个群范围网络

    输出:

      

    nginx和php工作正常,但我添加了数据库连接   index.php中的代码导致错误消息。是错误   因为他们没有连接?我已经安装了php-mysql扩展   它也有错误。我怎样才能确保服务   沟通成功。

    nginx and php working
    Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /code/index.php:11 Stack trace: #0 {main} thrown in /code/index.php on line 11
    

1 个答案:

答案 0 :(得分:0)

而不是网络(我经常在堆栈上看到这些网络没有像预期的那样工作)尝试使用Sub CopyWorkbook() Dim sh as Worksheet, wb as workbook Set wb = workbooks("Target workbook") For Each sh in workbooks("source workbook").Worksheets sh.Copy After:=wb.Sheets(wb.sheets.count) Next sh End Sub ,这很好地解释了here

尝试删除所有自定义网络配置,只需修改您的应用程序撰写文件,如下所示:

external_links

其中version: "3.4" # removed all custom networks configuration services: web: image: nginx:latest external_links: - mysql_1:mysql [..] php: image: php:7-fpm external_links: - mysql_1:mysql [..] 是由后一个撰写文件创建的实际容器名称,mysql_1是一个别名,您的服务将在mysqlphp个容器中可用

链接是v3中的遗留选项,Docker建议使用网络。 我发布了关于swarm部署的编辑,因为方法完全不同,因为Docker在部署swarm时会忽略链接。