记录使用Docker时的一些问题

无法启动Docker服务

运行 service docker start 时报错

Redirecting to /bin/systemctl start docker.service Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

解决问题的办法就是清空 /var/lib/docker 下的所有文件。要注意这样会导致你所有的Docker数据都会丢失。

来自 [docker service failed to start #25913 github issues](https://github.com/docker/docker/issues/25913)

docker 主机的 iptables 设置

  • iptables failed - No chain/target/match by that name

    一个bug,重启dockers服务就好了。

      mv /var/lib/docker/network/files /tmp/docker-iptables-err
      systemctl restart docker
    
  • iptable filter

    使用 Docker PPTP 的 iptable 例子

      *nat 
      -A POSTROUTING -s 10.99.99.0/24 -o eth0 -j MASQUERADE
    
      * filter
      -A FORWARD -d 10.99.99.0/24 -j ACCEPT
      -A FORWARD -s 10.99.99.0/24 -j ACCEPT
    

    这个 issue 是我提的。提完之后自己就找到答案了。

来自iptable filter - github

can’t modprobe af_key in debian8

这个与主机提供商有关了。主机在使用 docker 时某些项目需要使用 IPsec NETKEY 内核模块,其它主机不了解,linode的默认内核是修改过的,所以没有这个内核模块。如果想启用的话需要在后台配置里将默认启动内核改为 GRUB 2 模式。

来自docker issue - github


zsh进阶配置 - 显示 hostname

你可以查看我在github上的开源项目 KeluLinuxKit 获得完整源码。

手上有好几台服务器,配置都是相似的,也使用zsh。每次窗口稍微一多,就不知道是在哪个服务器上了,每次hostname也是麻烦。寻思着还是想办法在zsh上显示hostname吧。然后找到了一个超强的 .zshrc 配置。原文在这:My Extravagant Zsh Prompt

我稍微做了一点点调整,将它加到 .zshrc 里去,最后是这样子的。

效果图如下:

源码如下:

function collapse_pwd {
    echo $(pwd | sed -e "s,^$HOME,~,")
}

function prompt_char {
    git branch >/dev/null 2>/dev/null && echo '±' && return
    hg root >/dev/null 2>/dev/null && echo '☿' && return
    echo 'YUKI.N > '
}

function battery_charge {
    echo `$BAT_CHARGE` 2>/dev/null
}

function virtualenv_info {
    [ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') '
}

function hg_prompt_info {
    hg prompt --angle-brackets "\
< on %{$fg[magenta]%}<branch>%{$reset_color%}>\
< at %{$fg[yellow]%}<tags|%{$reset_color%}, %{$fg[yellow]%}>%{$reset_color%}>\
%{$fg[green]%}<status|modified|unknown><update>%{$reset_color%}<
patches: <patches|join( → )|pre_applied(%{$fg[yellow]%})|post_applied(%{$reset_color%})|pre_unapplied(%{$fg_bold[black]%})|post_unapplied(%{$reset_color%})>>" 2>/dev/null
}

PROMPT='
%{$fg[magenta]%}%n%{$reset_color%} at %{$fg[yellow]%}%m%{$reset_color%} in %{$fg_bold[green]%}$(collapse_pwd)%{$reset_color%}$(hg_prompt_info)$(git_prompt_info)
$(virtualenv_info)$(prompt_char) '

RPROMPT='$(battery_charge)'

ZSH_THEME_GIT_PROMPT_PREFIX=" on %{$fg[magenta]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[green]%}!"
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg[green]%}?"
ZSH_THEME_GIT_PROMPT_CLEAN=""

参考资料


Laravel 资源推荐

使用 Laravel 进行开发也有两年的时间了。整理了一下平时常用的资源。

首先不得不说这个 Github 项目,整理了来自Laravel生态系统的精选资源,包括书签、包、教程、视频以及其它诸多很酷的资源。原项目有4000+的star,folk过来做了本土化。 非常的全面。基本上所有的项目我也看了一遍,发现下面几个项目最实用。记录一下。

插件包

项目案例

参考资料


php is_a 函数

这几天写了个测试用例,发现一个点记录下。Eloquent 在取出一系列数据后是个集合collection。所以在判断的时候应该判断是否为collection,而不是数组。即:

 is_a($item, 'Illuminate\Database\Eloquent\Collection')

先前没有考虑清楚,使用is_array判断。然而collection是个object而非array。

具体代码如下:

/**
 * 删除所有子关系最后删除自己
 *
 * @return bool
 * @throws \Exception
 */
public function del()
{
    $className = get_class($this);
    foreach ($className::$hasModels as $relate) {
        $relateModel = $this->$relate;
        if (is_array($relateModel) || is_a($relateModel, 'Illuminate\Database\Eloquent\Collection')) {
            foreach ($this->$relate as $item) {
                $item->delete();
            }
        } else {
            $relateModel->delete();
        }
    }

    $this->delete();
    return true;
}

事实上 instanceof 也可以实现这样的效果:

if($relateModel instanceof 'Illuminate\Database\Eloquent\Collection') {

}

参考资料