无法在官方结构之后连接到 MySQL Docker容器



中的以下步骤https://hub.docker.com/_/mysql/:

启动mysql服务器实例

启动MySQL实例很简单:

$docker-run--命名一些mysql-e mysql_ROOT_PASSWORD=my secret pw-dmysql:标记

其中一些mysql是您想要分配给容器的名称,mysecret pw是要为MySQL根用户和标记设置的密码是指定所需MySQL版本的标记。请参阅上面的列表以获取相关标签。从MySQL命令行客户端连接到MySQL

以下命令启动另一个mysql容器实例并运行针对原始mysql容器的mysql命令行客户端,允许您对数据库实例执行SQL语句:

$docker-run-it-networksome-network-rm-mysql-hsome-mysql-e示例用户-p

其中some mysql是原始mysql容器的名称(连接到某个网络Docker网络(。

我启动了一个mysql docker容器,然后我试图运行另一个作为mysql客户端,但我不知道如何指定--network参数:

我应该输入什么而不是some-network?我是Docker的新手,对Docker network一无所知。如果我忽略了这个参数,就会出现Unknown MySQL server host错误。

在启动第一个容器之前,您需要创建一个Docker网络

docker network create some-network

你可以在这里使用任何你想要的名字,但为了与问题保持一致,我将使用some-network

当您启动数据库容器时,它还需要连接到同一网络

docker volume create mysql-data  # this is essentially required too
docker run 
--name some-mysql 
-e MYSQL_ROOT_PASSWORD=my-secret-pw 
-d 
--net some-network                  # matches `docker network create`
-v mysql-data:/var/lib/mysql/data   # don't lose data on restart
mysql:tag

(还有一个docker network connect命令,但重新创建容器以更改设置是非常正常的做法。(

您也不需要第二个容器来运行MySQL客户端:您可以从主机连接到普通的mysql命令行工具。您需要发布容器外的端口

docker run 
-p 12345:3306 
...

第一个端口号可以是您想要的任何与主机上的另一个进程不冲突的端口号;第二个数字必须是标准MySQL端口号3306。然后,您可以使用连接到该数据库

mysql -h 127.0.0.1 -p 12345 -u example-user -p

这个问题的其他答案已经认可Docker Compose作为一种设置。为您打造docker network create网络;Compose中的Networking更详细地描述了此设置。然而,它在运行交互式终端应用程序方面并不出色,您可能需要执行类似docker-compose run db mysql -h db ...的操作才能以这种方式访问它。已发布的ports:方法也将起作用。

如果你有多个容器可以一起工作,你应该阅读docker compose,以便配置网络、主机、env-var等…

// docker-compose.yml
version: "3.2"
services:
mysql_client:
depends_on:
- mysql_database
mysql_database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: test
# exec this command to up your containers
docker-compose up

默认情况下,容器位于同一网络上,在mysql_client中,使用mysql_database作为mysql连接的主机名。

通过DockerHub,我发现这个docker编写的脚本可以让Adminer和MySQL协调运行。

# Use root/example as user/password credentials
version: '3.1'
services:
adminer:
image: adminer
restart: always
ports:
- 8080:8080
db:
image: mysql:5.6
restart: always
environment:
MYSQL_ROOT_PASSWORD: example

将它保存到一个名为docker-compose.yml的文件中,并使用dockercompose运行它。

在cmd promt中,导航到包含该文件的目录并运行以下操作:docker-compose up

docker撰写参考

最新更新