When you run something like
docker run -p 90:3306 you expose the internal port 3306 to the machine (machine running docker) port 90.
When you connect a container to another, you should use internal ports so
docker run -d --name wp-site1 \
--link db -p 85:80 \
-e WORDPRESS_DB_HOST=db:3306 \
--network wp-mysql-network \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=P@ssw0rd \
-v wp-data-demo3:/var/www/html wordpress:latest
Moreover, in your case, you should only expose your frontend, not the backend (database).
If you're successful with wordpress on HTTP, I would suggest to have a look on Traefik to handle HTTPS connections.
(an example below).
https://graspingtech.com/wordpress-docker-compose/
EDIT
Create dependencies
docker network create wp-mysql-network
docker volume create mysql-demo3
docker volume create wp-data-demo3
Create database instance
docker run --name db \
--network wp-mysql-network \
-v mysql-demo3:/var/lib/mysql \
--restart=always \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=P@ssw0rd -d mysql:latest
Create the wordpress instance which is connected to db
docker run -d --name wp-site1 \
--link db -p 85:80 \
-e WORDPRESS_DB_HOST=db:3306 \
--network wp-mysql-network \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=P@ssw0rd \
-v wp-data-demo3:/var/www/html wordpress:latest
Connect to you wordpress frontend with your web browser
http://localhost:85