我用命令运行docker wordpress image
docker run –name test-wordpress -p 8081:80 -d wordpressMySQL 8在Windows 10上的localhost上。数据库凭据有效。
在wordpress设置中我使用…
默认情况下,docker会将新容器附加到桥接网络。这意味着地址如: localhost 和 127.0.0.1 仅指容器本身。不是主机。
localhost
127.0.0.1
容易解决这个问题,就是将MySQL数据库包装在它自己的容器中。通过这种方式,您的容器可以毫无问题地相互对话
如果您确实要将容器中的服务与主机上的服务连接,则需要将容器连接到适当的网络。
首先,您需要创建一个网络。假设您的本地计算机具有固定的IP 192.168.0.1 ,你应该可以这样做:
192.168.0.1
docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 dockernet
然后你可以:
docker run --name test-wordpress --net=dockernet -p 8081:80 -d wordpress
然后,您应该能够通过IP从容器内部引用主机: 192.168.0.1 。
这里更好的替代方法是使用docker-compose创建应用程序堆栈定义,其中包括数据库和wordpress应用程序。
你可以创建一个 docker-compose.yml 像这样的文件:
docker-compose.yml
的 docker-compose.yml 强>
version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: db_data: {}
然后用这个开始堆栈:
docker-compose up
然后访问: HTTP://本地主机:8000
请注意,数据库数据将存储在名为docker的托管卷中 db_data 。
db_data
有关安装docker-compose的详细信息,请访问: https://docs.docker.com/compose/install/
docker run
同样可以实现同样的目标 docker run , 像这样:
docker volume create db_data docker network create mysqlnet docker run --name test-mysql -e MYSQL_ROOT_PASSWORD=somewordpress -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpress -v db_data:/var/lib/mysql --net=mysqlnet -d mysql:5.7 docker run --name test-wordpress -e WORDPRESS_DB_HOST=test-mysql:3306 -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_NAME=wordpress --net=mysqlnet -p 8081:80 -d wordpress:latest
您可以改为将mysql数据文件的映射更改为本地目录,只需省略即可 docker volume create 声明。
docker volume create