docker django mysql.sock位于不同位置

3pvhb19x  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(326)

我正在尝试将我的django文件打包,但我一直遇到以下问题: (2006, ’Can\‘t connect to local MySQL server through socket \‘/var/run/mysqld/mysqld.sock\’ (2 “No such file or directory”) 我后来发现mysql.sock位于以下位置: /tmp/mysql.sock 而不是 /var/run/mysqld/mysqld.sock ,如何更改docker要查看的位置 /tmp/mysql.sock 这是我的docker-composr.yml:

version: '3'

services:
  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somepassword

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

我已经按照mysql docker网站上的说明将mysql示例链接到一个容器
编辑:我读到另一个类似的堆栈溢出,我把django代码改为 'HOST': '127.0.0.1'DATABASES 现在我得到: (2006, 'Can\'t connect to MySQL server on \'127.0.0.1\' (111 "Connection refused")')

5kgi1eie

5kgi1eie1#

如果要连接到容器内外的容器化mysql服务器,首先需要确保端口Map到主机上:

services:
  db:
    image: mysql
    ports:
      - "3306:3306"
    ...

这将允许您使用 localhost 或者 127.0.0.1 直接在主机上。
如果你想在这两种情况下都能运行django web 在主机上,您需要重写 DATABASES 设置取决于场景。这个 web 容器将需要使用 HOST 的价值 db ,而您的本地计算机将需要值 localhost .

pes8fvy9

pes8fvy92#

你的主机应该是db。当使用docker compose时,您可以通过服务名称为不同的服务器寻址。
因此,在settings.py中,您应该:

DATABASES = {
    'default': {
        'HOST': 'db',
         ...
    }
}

相关问题