2024年3月

即使容器已经创建好了,您仍然可以为其分配固定的 IP 地址。这可以通过将容器连接到自定义网络并指定 IP 地址来实现。

以下是一个示例,演示如何将现有容器连接到自定义网络并指定固定的 IP 地址:

  1. 首先,创建自定义网络(如果尚未创建):

    docker network create --subnet=172.18.0.0/16 my-network
  2. 将容器连接到自定义网络,并指定固定的 IP 地址:

    docker network connect --ip 172.18.0.2 my-network my-container

    在此示例中,将容器 my-container 连接到了 my-network 网络,并将其 IP 地址指定为 172.18.0.2

  3. 查看创建的自定义网络:

    docker inspect my-network
  4. 使用 docker network disconnect 命令从容器中断开默认网络。例如:

    docker network disconnect bridge <container_id_or_name>

通过这种方式,您可以为已经创建的容器分配固定的 IP 地址。请确保所选的 IP 地址在指定的子网范围内,并且与网络中的其他 IP 地址不冲突。

错误提示

git@gitlab.abc.top: Permission denied (publickey).
fatal: Could not read from remote repository.

这个错误通常是由于没有正确配置 SSH 密钥而引起的。要在 GitLab 上添加 SSH 密钥,请按照以下步骤进行操作:

  1. 生成 SSH 密钥对:如果您还没有 SSH 密钥对,您需要先生成一个。您可以使用以下命令在终端中生成 SSH 密钥对:

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

    按照提示逐步完成生成密钥对的过程。在生成密钥对时,您可以选择将密钥对保存在默认位置(通常为 ~/.ssh/id_rsa~/.ssh/id_rsa.pub)或者指定自定义路径。

  2. 添加 SSH 公钥到 GitLab:

    • 登录到您的 GitLab 帐户。
    • 转到个人资料设置页面或者组织设置页面,然后选择 "SSH Keys" 选项卡。
    • 复制您的 SSH 公钥(通常是 ~/.ssh/id_rsa.pub 文件中的内容)。
    • 在 GitLab 页面上的 "Key" 字段中粘贴您的 SSH 公钥,并为该密钥添加一个标题(可以是任何描述性的名称)。
    • 点击 "Add key" 或者 "Add SSH Key" 以保存您的 SSH 公钥。
  3. 配置本地 Git:

    确保您的本地 Git 配置了正确的用户信息,包括您的姓名和邮箱地址。您可以使用以下命令来设置:

    git config --global user.name "Your Name"
    git config --global user.email "your_email@example.com"
  4. 尝试再次使用 SSH 连接到 GitLab:

- 一般做到第二步就可以正常的使用git clone xxx 远程仓库到本地了

  • 现在,您应该可以使用 SSH 连接到 GitLab 仓库,而不再收到 "Permission denied" 错误。请确保使用的是 SSH URL,而不是 HTTPS URL。
  • 如果您遇到任何问题,请确保按照上述步骤操作,并检查每一步的细节是否正确。

  1. 用以下命令覆盖容器中的jar包,注意宿主机的jar包名要与容器中的jar包名相同,否则copy进去容器后,可能导致容器无法重新启动,需要重新使用image来构建容器。
用dockerfile构建image的时候,jar包需要放在/app下(不是必须)
docker cp /root/web.jar mychatgpt:/app/web.jar
  1. 提示' Successfully copied'后执行重启容器命令
docker restart your_container
  1. 容器内容器nginx
service nginx reload

BTW:使用stat your_file 可以查看文件的信息,如修改日期,创建日期等

nginx默认静态目录

/usr/share/nginx/html

nginx默认配置文件目录

/etc/nginx

将容器中的文件复制到宿主机

docker cp <container_id>:/path/to/container/file /path/to/host/destination

举例

docker cp your_container_id:/app/data.txt /host-data/data.txt

要在 Debian 中解压 ZIP 文件,您可以使用 unzip 命令。首先,确保您的系统上已经安装了 unzip。如果没有安装,可以使用以下命令进行安装:

sudo apt-get update
sudo apt-get install unzip

一旦安装了 unzip,您可以使用以下命令解压 ZIP 文件:

unzip yourfile.zip

yourfile.zip 替换为要解压的 ZIP 文件的实际文件名。这将会将 ZIP 文件的内容解压到当前目录下。

如果您想将 ZIP 文件解压到特定目录,可以使用 -d 选项,例如:

unzip yourfile.zip -d /path/to/extract/to

这将会将 ZIP 文件的内容解压到 /path/to/extract/to 目录中。

要允许远程主机访问在 Docker 中运行的 MySQL 服务器,您需要执行以下步骤:

  1. 进入 MySQL 容器:

    docker exec -it mysql-container-name bash

    mysql-container-name 替换为您 MySQL 容器的名称或容器的ID。

  2. 连接到 MySQL 服务器:

    mysql -u root -p

    您将需要输入 MySQL root 用户的密码。

  3. 使用以下 SQL 命令为 root 用户允许远程访问:

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

    请将 'your_password' 替换为您希望设置的 root 用户的密码。这将授予 root 用户从任何主机('%')连接到 MySQL 服务器的权限。这是出于安全考虑,通常不建议开放给所有主机。在生产环境中,应该只允许特定的 IP 地址或主机名访问。

  4. 刷新权限:

    FLUSH PRIVILEGES;
  5. 退出 MySQL:

    exit
  6. 退出容器:

    exit

现在,MySQL 服务器应该允许远程主机使用 root 用户连接。确保在生产环境中谨慎设置远程访问权限,以最大程度地提高安全性。此外,如果您运行的是 Docker Compose,可以考虑在 docker-compose.yml 文件中为 MySQL 服务设置环境变量以进行更详细的配置。

  1. 安装docker
  2. 安装nginx docker
  3. 在nginx容器中创建反代配置文件

-->在容器环境中

#创建反代配置文件
vi /etc/nginx/sites-available/reverse-proxy
或者:
vi /etc/nginx/sites-enabled/reverse-proxy
#配置如下
server {
    listen 80;//宿主机端口,也就是nginx容器的80端口
    server_name example1.com;//可以是子域名

    location / {
        proxy_pass http://localhost:80;//注意是容器的ip和端口,不是宿主机的(注意:容器使用宿主机未被占用的端口即可,不一定必须是80端口,只需要容器内项目暴露的端口是80就可以了)
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen 80;
    server_name example2.com;//可以是子域名

    location / {
        proxy_pass http://localhost:80;//注意是容器的ip和端口,不是宿主机的
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
  1. nginx -t 检查配置是否有效
  2. service nginx reload 重启nginx

以上配置后就可以用字域名的80端口访问项目了,下一步需要配置证书,使用https的方式访问

特别注意:在构建nginx容器时务必同时暴露80和443端口,否则无法配置SSL

配置SSL(在nginx容器中进行配置)

Certbot 申请证书过程
要在运行在 Docker 中的 Nginx 中配置两个项目都使用 HTTPS,您可以按照以下步骤进行配置:

  1. 准备 SSL 证书

    对于每个项目,您需要准备正确的 SSL 证书。如果您使用 Let's Encrypt,可以使用 Certbot 工具为每个项目获取证书。确保证书存储在主机上,并且您可以在 Nginx 配置中引用它们。

certbot --nginx -d <your_domain>
  1. _/etc/nginx/sites-enabled_目录下(没有就创建)为每个项目创建 Nginx 配置文件

    在 Nginx 宿主机上,为每个项目创建一个独立的 Nginx 配置文件。假设您有两个项目,分别为 Project1 和 Project2,可以创建两个配置文件,例如 project1.confproject2.conf

project1.conf配置:

server {
    listen 80;
    server_name project1.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name project1.example.com;

    ssl_certificate /etc/letsencrypt/live/project1.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/project1.example.com/privkey.pem;

    # 其他 SSL 配置

    location / {
        proxy_pass http://172.17.0.3:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        # 其他代理设置
    }
}

请确保替换 project1.example.comproject2.example.com 为您的实际域名,并将 SSL 证书和私钥的路径替换为正确的路径。

  1. 修改nginx.conf在http块最后添加:include /etc/nginx/sites-enabled/*;
  2. nginx -t 检查配置文件是否正确
  3. service nginx reload重启nginx

现在,您应该可以通过 HTTPS 访问两个项目,每个项目都有自己的 SSL 证书和独立的 Nginx 配置。项目1通过 https://project1.example.com 访问,项目2通过 https://project2.example.com 访问。

nginx容器中:

#nginx默认网页目录:
/usr/share/nginx/html
#nginx默认配置目录:
/etc/nginx/nginx.conf

如果单独的前端项目部署到nginx默认目录(容器的nginx),然后配置SSL,nginx配置文件可以参考如下方式写:

server {
    listen 80;
    server_name your domain;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your domain;

    ssl_certificate /etc/letsencrypt/live/your domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your domain/privkey.pem;


    location / {
    root /usr/share/nginx/html;
        try_files $uri /index.html;
    }
}

当服务器443端口不可用时,web服务需要用到443端口,如何处理

  • 在Cloudflare上开启橙色云proxy,然后SSL启用FULL,如果不启用FULL,由于服务器开启了ssl,Flexible模式会被服务器拒绝,浏览器访问时会出现重定向次数过多提示!

当遇到无法上传大文件的时候,nginx web配置文件增加以下配置

server {
...
client_max_body_size 0;
...
}

如果在执行 git remote -v 后没有看到任何远程仓库列表,那可能是因为您的本地仓库尚未与远程仓库建立连接。您可以尝试执行以下步骤来确保与远程仓库建立关联:

  1. 添加远程仓库: 使用 git remote add 命令来添加一个远程仓库。请替换 <remote_name> 为您想要指定的远程仓库名称,<remote_url> 为远程仓库的 URL。例如:

    git remote add origin <remote_url>//git remote add origin git@github.com:mylifeinn/jyen-frontend.git

    这将将远程仓库 URL 关联到名为 "origin" 的远程仓库。确保用实际的远程仓库 URL 替换 <remote_url>

  2. 验证远程仓库: 运行 git remote -v 命令再次验证远程仓库是否正确关联。您应该能够看到远程仓库的 URL。
  3. 推送更改: 一旦远程仓库正确关联,您可以使用 git push 命令将更改推送到远程仓库。例如:

    git push origin master

    这将把本地的 "master" 分支推送到 "origin" 远程仓库。

如果仍然遇到问题,可能需要检查远程仓库 URL 是否正确,以及确保您有访问权限。如果您是从另一个仓库克隆的,请确保它不是一个空仓库。

要将容器中脚本处理后的文件传输回宿主机的映射目录,您可以在运行 Docker 容器时使用卷映射(Volume Mounting)功能。具体操作如下:

  1. 在运行容器时设置卷映射

    • 使用 -v 参数在 docker run 命令中映射一个宿主机目录到容器内部目录。例如:docker run -v /path/on/host:/path/in/container your-image
    • 这里的 /path/on/host 是宿主机上的目录,/path/in/container 是容器内部的目录。
  2. 在脚本中写入到映射目录

    • 确保您的脚本将处理后的文件写入到容器内部的 /path/in/container 目录中。

这样,脚本处理后的文件就会自动出现在宿主机的 /path/on/host 目录中。这是因为该容器目录实际上是宿主机目录的一个镜像,所以对该目录的任何更改都会反映在宿主机上。