【发布时间】:2021-01-25 06:15:48
【问题描述】:
我开始使用 Laravel 进行开发,从版本 8 开始,Laravel 开发环境附带了 docker 和一个名为 Sail (docker-compose) 的工具。
当我配置我的.env 文件时,我需要对 MySQL 容器进行 SSH 并获取其主机名,然后对 Mailhog 容器进行 SSH 并执行相同操作。
除此之外,当我想通过 TablePlus 之类的工具查看数据库时,我无法让它通过主机名访问 MySQL 容器。
我做了一些搜索,发现我可以添加hostname指令,但我不确定它是否不会干扰内部容器的通信。
我可以在我的情况下使用hostname 指令安全吗?有没有办法以一个主机名加入容器并使其可以从我的主机访问?
我正在为 MAC 运行 Docker Desktop - v20.10.2
docker-compose供参考
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
ports:
- '${APP_PORT:-80}:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
# - pgsql
- redis
# - selenium
# selenium:
# image: 'selenium/standalone-chrome'
# volumes:
# - '/dev/shm:/dev/shm'
# networks:
# - sail
mysql:
hostname: 'beatsy-db'
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
healthcheck:
test: ["CMD", "mysqladmin", "ping"]
# pgsql:
# image: postgres:13
# ports:
# - '${FORWARD_DB_PORT:-5432}:5432'
# environment:
# PGPASSWORD: '${DB_PASSWORD:-secret}'
# POSTGRES_DB: '${DB_DATABASE}'
# POSTGRES_USER: '${DB_USERNAME}'
# POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
# volumes:
# - 'sailpostgresql:/var/lib/postgresql/data'
# networks:
# - sail
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
healthcheck:
test: ["CMD", "redis-cli", "ping"]
# memcached:
# image: 'memcached:alpine'
# ports:
# - '11211:11211'
# networks:
# - sail
mailhog:
hostname: 'beatsy-mail'
image: 'mailhog/mailhog:latest'
ports:
- '${FORWARD_MAILHOG_PORT:-1025}:1025'
- '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
# sailpostgresql:
# driver: local
sailredis:
driver: local
【问题讨论】:
-
hostname:几乎什么都不做。这相当于在您的主机系统上运行sudo hostname stackoverflow.com:它会更改容器认为自己的名称,但不会影响其他任何东西如何连接到它。
标签: laravel docker docker-compose