我正在尝试从我的 docker 主机访问 mysql 数据库到容器。
这是我自己的 dockerfile,它在端口 3306 上安装了一个数据库公开。我使用 docker-compose 启动我的 docker,我的撰写文件将 3308 主机端口映射到 3306 容器端口。
我可以像这样从主机访问 mysql:
mysql -h localhost -P 3308 -u root -pMyPassword
它运行良好,但我无法弄清楚,为什么我看不到容器中的任何数据?
从容器内部,我有一个测试数据库,我可以毫无问题地连接到它。但是当我从主机连接到容器 mysql 进程时,它似乎向我显示了来自主机的 mysql 数据,而不是来自容器的数据。
有任何想法吗?
谢谢 :)
编辑 1:
所以这是我可以将 mysql 连接到容器的第一种方法:
docker exec -it MyContainer mysql -uroot -pMyPassword
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
+--------------------+
Run Code Online (Sandbox Code Playgroud)
它向我展示了我的数据库:test_db 但是如果我从以下位置访问:
mysql -h localhost -P 3308 -u root -pMyPassword
mysql> show …Run Code Online (Sandbox Code Playgroud) 我对docker很新,我尝试为不同的网站创建一个docker-compose图像.
除了我的卷外,一切都很好.
这是docker-compose的例子:
version: '2'
services:
website:
build:
context: ./dockerfiles/
args:
MYSQL_ROOT_PASSWORD: mysqlp@ssword
volumes:
- ./logs:/var/log
- ./html:/var/www
- ./nginx:/etc/nginx
- ./mysql-data:/var/lib/mysql
ports:
- "8082:80"
- "3307:3306"
Run Code Online (Sandbox Code Playgroud)
这是我的docker文件:
FROM php:5.6-fpm
ARG MYSQL_ROOT_PASSWORD
RUN export DEBIAN_FRONTEND=noninteractive; \
echo mysql-server mysql-server/root_password password $MYSQL_ROOT_PASSWORD | debconf-set-selections; \
echo mysql-server mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD | debconf-set-selections;
RUN apt-get update && apt-get install -y -q mysql-server php5-mysql nginx wget
EXPOSE 80 3306
VOLUME ["/var/www", "/etc/nginx", "/var/lib/mysql", "/var/log"]
Run Code Online (Sandbox Code Playgroud)
一切都运行良好,期望我的所有文件夹都是空的进入我的主机卷.我想在我的文件夹中看到nginx conf和mysl数据.
我究竟做错了什么?
谢谢你的帮助.
编辑1:实际上问题是我希望docker-compose在我的docker目录中创建卷(如果它不存在),并且如果它存在则使用该卷,如https://stackoverflow.com/a/中所述. 39181484.但它似乎不起作用.
我在服务器配置上遇到问题,我无法弄清楚我做错了什么.
所以我有一个像这样的nginx代理:
server {
listen *:443 ssl;
ssl_certificate /root/software/keys/mywebsite.keys/mywebsite.crt;
ssl_certificate_key /root/software/keys/mywebsite.keys/mywebsite.key;
server_name www.mywebsite.com mywebsite.com;
access_log /var/log/nginx/mywebsite.access.log;
error_log /var/log/nginx/mywebsite.error.log;
root /srv/new-website;
index index.html index.htm index.php;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_set_header X-Forwarded-Proto https;
proxy_pass http://127.0.0.1:8082;
}
}
Run Code Online (Sandbox Code Playgroud)
我的容器正在我的docker-compose.yml文件中侦听端口8082:
version: '2'
services:
websites:
build:
context: ./dockerfiles/
args:
MYSQL_ROOT_PASSWORD: MyPassword
volumes:
- ./logs:/var/log
- ./html:/var/www
- ./mysql-data:/var/lib/mysql
ports:
- "8082:80"
Run Code Online (Sandbox Code Playgroud)
在我的容器内,我正在安装nginx,使用此配置:
server { …Run Code Online (Sandbox Code Playgroud)