くりーむわーかー

プログラムとか。作ってて ・試しててハマった事など。誰かのお役に立てば幸いかと。 その他、いろいろエトセトラ。。。

Linux

AWSでDockerのビルドが上手くいかないやつ

Dockerfileで例えばapt updateとかしてると下記エラー。

Err:1 http://security.debian.org/debian-security buster/updates InRelease
  Temporary failure resolving 'security.debian.org'

どうも、名前解決が出来てない。

理由は色々あると思うのですが、ホスト側のnameserverがdocker側のプライベートIP的なのと

似た感じになってるとdockerから見れて無くてエラーになるっぽい。

この場合はdockerのdns指定して立ち上げるようにする。

dnsはGoogleが公開してるDNSサーバ(8.8.8.8)使う事が多い模様

コマンドでやる場合

docker run --dns 8.8.8.8 -it busybox nslookup www.example.com

docker-compose

dns: 8.8.8.8

ただ、docker-composeはどうもうまくいかなかった。

docker-composeの場合、ホスト側の 「/etc/resolv.conf」がそのまま取り込まれてるっぽいのですが、

上記のdnsの指定が効かないんですよね。。。

何でなんだろ。

dockerのサービスに登録しちゃう場合

下記ファイルを編集(無かったら作成)

sudo vi /etc/docker/daemon.json

{
    "dns": ["8.8.8.8"]
}

# あとリスタート
sudo systemctl restart docker

※多分このやり方はあまりお勧めじゃないように思うけど、compose側の設定効かない時はこれでいくしかなさそう。


参考

Pythonで共有ライブラリ(hoge.so)を呼ぶ

CentoOS。Pythonから***.soみたいな共有ライブラリを呼ぶ必要があったのでちょっと調べた。Python3.6。

呼び方は↓。

import ctypes

LIB_PATH = '/hoge/fuga/libmodule.so'
lib = ctypes.cdll.LoadLibrary(LIB_PATH )

res = lib.hogefunc()

#intの引数とるやつ
arg_int= ctypes.c_int(10)
res = lib.fugefunc(arg_int)

関数呼ぶのは上で行けるんだけど、引数が結構ややこしい。基本的には公式のctype見ればいいんだけども。やっかいなのが「char *」。ポインタの場合は↓の感じ。

str="some args str"
strb=bytes(str , encoding='utf-8', errors='replace')
strp=ctypes.c_char_p(strb )

res = lib.mogefunc(strp)

一回バイト配列に変換してからポインタに変換しないとダメみたいですよ。

問合せ