docker及服務器遇到的坑


DNS不可用

如出現這樣的錯誤:

ERROR: error pulling image configuration: Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/88/881bd08c0b08234bd19136957f15e4301097f4646c1e700f7fea26e41fc40069/data?verify=1552449302-pJVj4p2TS9sUquWEjuDZgIA0f7E%3D: dial tcp: lookup production.cloudflare.docker.com on 10.0.2.3:53: no such host

進入 /etc/resolv.conf 添加

nameserver 8.8.8.8

vagrant 搭的虛擬環境或者docker里面遇到過,每次重啟都會失效,可以寫個shell腳本修改,每次開機啟動就好了。

docker使用還有種方案,容器內的/etc/resolv.conf掛載到宿主機下 /etc/resolv.conf。

修改docker查找源

docker search centos
Error response from daemon: Get https://index.docker.io/v1/search?q=centos: read tcp 52.200.132.201:443: i/o timeout

進入/etc/docker

查看有沒有 daemon.json。這是docker默認的配置文件。

如果沒有新建,如果有,則修改。

$ vi daemon.json
 {
   "registry-mirrors": ["https://registry.docker-cn.com"]
 }

保存退出。

重啟docker服務

service docker restart

成功!

容器保持固定ip

https://yaxin-cn.github.io/Docker/docker-container-use-static-IP.html

查看docker連接

查看容器進程號

docker inspect -f '{{.State.Pid}}'

查看連接

nsenter -t 1840 -n netstat #1840為上面操作獲取的pid

容器間通信

參考文章 https://birdben.github.io/2017/05/02/Docker/Docker實戰(二十七)Docker容器之間的通信/

新版docker,在容器B run中使用 --link 【容器A】,這樣在容器B中就能與容器A建立連接,如需要用到容器A的ip,進行連接服務:

# mysql是容器名
mysql:3306/users?user=root&password=123456

容器拷貝數據

  • 從容器拷貝數據到宿主機

docker cp 容器名:要拷貝的文件在容器里面的路徑 要拷貝到宿主機的相應路徑

  • 從宿主機拷貝數據到容器

docker cp 要拷貝的文件路徑 容器名:要拷貝到容器里面對應的路徑

php連接docker mysql 8.0出錯authentication method unknown

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

MySQL 8默認使用了新的密碼驗證插件:caching_sha2_password,而之前的PHP版本中所帶的mysqlnd無法支持這種驗證

解決方法兩種,一種是升級PHP支持mysql8的新驗證插件,另一種mysql驗證方式降級。

mysql配置文件 my.cnf添加配置:

default_authentication_plugin=mysql_native_password

docker php容器 fpm總是出現file not found

nginx 配置SCRIPT_FILENNAME 一定要注意 配置的是php容器中代碼所在的路徑,不是nginx的路徑,這個坑坑了我許久!!!

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    #fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    fastcgi_param SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
    include fastcgi_params;
}    

docker 安裝amqp擴展

php7.1-fpm 總提示lib錯誤

configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path

apt-get -y install librabbitmq-dev

Docker容器內連接宿主機的Mysql服務器

宿主機在與容器同一局域網的IP地址一般是docker0對應的IP地址段的首個地址(如172.0.17.1)
我們可以在容器里通過172.0.17.1:3306訪問到宿主機的mysql服務器

mysql服務器默認的設置為允許127.0.0.1段的ip地址訪問
所以此時用172.0.17.1:3306仍然無法訪問到宿主機
此時需要在設置一下mysql

 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
 mysql>flush privileges;
// 其中各字符的含義:
// *.* 對任意數據庫任意表有效
// "root" "123456" 是數據庫用戶名和密碼
// '%' 允許訪問數據庫的IP地址,%意思是任意IP,也可以指定IP
// flush privileges 刷新權限信息

我用vagrant+virtualbox,ipconfig查詢本機ip,然后去連,連上了

bash: ps: command not found

或者 bash: top: command not found

apt-get update && apt-get install procps


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM