Docker公开了与主机

时间:2016-12-15 15:15:46

标签: docker docker-compose docker-networking

我正在为应用服务和数据库服务使用 docker-compose.yml 文件:

version: '2'
services:

   app-service:
     image: app-image
     container_name: app-container
     ports:
       - "5000:5000"
     networks:
       - my-network
     links:
       - db-service

   db-service:
     image: db-image
     container_name: db-container
     ports:
       - "5432:5432"
     networks:
       - my-network

networks:
  my-network:
    driver: bridge

应用程序服务使用 db-service 作为主机的连接字符串连接到数据库:

"User ID=postgres;Password=password;Host=db-service;Port=5432;Database=my-table;Pooling=true;"

在正在运行的应用程序容器上工作正常但我还需要使用来自主机的相同连接字符串访问数据库。 (用于开发期间的数据库迁移)

  • 我考虑过向主机添加一条路线:
    db-service - > localhost 但这不是一个好的解决方案,因为它取决于主机操作系统。

  • 我尝试在连接字符串中使用 localhost ,因为我的主机随后连接到数据库容器。但很明显,应用程序容器将不再连接。

  • 我还在撰写文件中使用 network_mode 设置和网络驱动程序,但没有运气。

如何在容器中使用相同的主机名,例如在我的主机中?

1 个答案:

答案 0 :(得分:1)

您可以为app-service和主机使用相同的连接字符串的唯一方法是使用以下命令更新主机的/etc/hosts文件:

127.0.0.1 db-service

(或者如果你在Docker机器上运行,请使用你的手机)

但这个解决方案可能不是最干净的解决方案。 IMO最好不要使用相同的连接字符串。