我正在尝试从我的 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)