我正在尝试使用 docker 配置 postgresql 安装。
FROM ubuntu:13.10
ADD . /db
# install postgres
# ...
RUN chown postgres:postgres /db -R && \
chmod 700 /db -R
USER postgres
RUN /etc/init.d/postgresql start &&\
createdb test &&\
psql -d test -f /db/all.sql
Run Code Online (Sandbox Code Playgroud)
我可以访问文件夹/db,但不能访问/db/plpgsql(其中包含由/db/all.sql 执行的文件)
我在 /db/plpgsql 上尝试了 chmod 777 但它也不起作用,权限被拒绝。
postgres@c364bdd94652:/$ ls -l | grep db
drwxrwxrwx 5 postgres postgres 4096 Jul 10 17:39 db
postgres@c364bdd94652:/$ cd db/
postgres@c364bdd94652:/db$ ls -l
-rwxrwxrwx 1 postgres postgres 2567 Jul 10 16:34 Dockerfile
-rwxrwxrwx 1 …Run Code Online (Sandbox Code Playgroud) 以下 BASH 脚本在 Docker 容器中下载并构建mpv(https://github.com/mpv-player/mpv-build),并使用 netcat 将文件发送到主机(主机正在使用 netcat 侦听):
HOSTIP="192.168.1.100"
PORT="62514"
nc -v -l $PORT > mpv &
sleep 1
sudo docker run ubuntu:14.04 /bin/bash -c "\
sed -i -e 's/# deb/deb/g' /etc/apt/sources.list; \
cat /etc/apt/sources.list; \
apt-get update; \
apt-get install --yes --force-yes git python-minimal; \
git clone https://github.com/mpv-player/mpv-build.git; \
cd mpv-build/; \
./update; \
apt-get install --yes --force-yes devscripts equivs; \
rm -f mpv-build-deps_*_*.deb; \
mk-build-deps -i -t \"apt-get --yes --force-yes --no-install-recommends\"; \
./build …Run Code Online (Sandbox Code Playgroud) 我的目标是为我的每个 docker 容器拥有一个可路由的公共 IPv6 地址。我希望能够使用 IPv6 协议连接进出我的容器。
我正在使用 Linode 并且我被分配了一个公共 IPv6 池:
2600:3c01:e000:00e2:: / 64 routed to 2600:3c01::f03c:91ff:feae:d7d7
Run Code Online (Sandbox Code Playgroud)
该“路由到”地址是由 dhcp 自动配置的:
# ip -6 addr show eth0
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2600:3c01::f03c:91ff:feae:d7d7/64 scope global mngtmpaddr dynamic
valid_lft 2591987sec preferred_lft 604787sec
inet6 fe80::f03c:91ff:feae:d7d7/64 scope link
valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)
我设置了 AAAA 记录,ipv6.daaku.org以便更轻松地使用:
# nslookup -q=AAAA ipv6.daaku.org
ipv6.daaku.org has AAAA address 2600:3c01:e000:e2::1
Run Code Online (Sandbox Code Playgroud)
为了测试,我手动分配了该地址:
# ip -6 addr add 2600:3c01:e000:00e2::1/64 dev eth0
# ip -6 addr show …Run Code Online (Sandbox Code Playgroud) 官方 nginx docker镜像 ( Dockerfile ) 使用以下技巧将其日志传递到 stdout 和 stderr,以便它们被 docker 日志收集器捕获并使用docker logs <container-name>以下命令查看:
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log
Run Code Online (Sandbox Code Playgroud)
我想这样做,但我已经supervisord为PID 1我的容器,它监督nginx的过程,并捕获输出和错误,并把它放在它自己的日志文件。因此日志不会到达 docker 日志收集器。
这是我的 supervisord.conf 中的相关块
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
priority=990
; NOTE: We do not want to redirect stdout and stderr of a nginx process to a logfile because we want docker log collector to get them.
stdout_logfile= …Run Code Online (Sandbox Code Playgroud) 我是 Docker 的新手,对 linux 一共 n00b,如果这听起来很傻,我很抱歉。
我已经在 Digital Ocean 上启动并运行了一个 docker 系统,并且运行良好。
我正在使用预先构建的Mirth Connect docker ,它运行良好,我可以做各种很酷的事情。我希望 Mirth 为我做的一件事是从容器内部发送电子邮件(SMTP 发件人),但 Docker 容器似乎无法发送电子邮件(我收到关于连接到我的邮件服务器的错误)。我在运行时尝试将端口 25 映射到 25,但什么也没做。
docker run -d --name mirth1 -p 8080:8080 -p 8443:8443 -p 25:25 -p 8585:8585 brandonstevens/mirth-connect
Run Code Online (Sandbox Code Playgroud)
linux 服务器可以通过端口 25 telnet 到我的邮件服务器,所以我知道这不是防火墙/数字海洋问题。这也不是欢乐的问题,因为我以前十亿次都没有这样做过。它在容器内的东西
所以我想这比我想象的要多。谷歌搜索显示了很多关于将 sendmail 添加到我的容器的链接,但那是针对 php 系统的吗?
为了支持 Docker 内存限制/配额,我想启用
cgroup_enable=memory swapaccount=1
Run Code Online (Sandbox Code Playgroud)
我的 Debian Jessie Google Cloud Compute Engine 实例上的 Linux 内核命令行选项。将它们添加到/etc/default/grub、更新和重新启动后,我可以看到以下选项处于活动状态/proc/cmdline:
BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64 root=UUID=aeb374a4-1a04-4ed7-adac-d5c57b350575 ro console=ttyS0,38400n8 elevator=noop cgroup_enable=memory swapaccount=1
Run Code Online (Sandbox Code Playgroud)
但是,docker info仍然抱怨它们被禁用:
$ docker info
[...]
WARNING: No kernel memory limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
[...]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?GCE Debian 映像中包含的内核是否在不支持这些功能的情况下构建?
我在 Windows 10 上使用 Docker 及其 docker-compose 功能。
现在,当我运行命令docker-compose up -d在后台启动一些容器时,即使在重新启动 Docker-Host 后,启动的容器也会运行。
我怎样才能防止这种情况?我只希望它们在我明确启动时启动。
我有一个 Docker 容器向 Internet 公开端口 3306。我想限制对某些公共 IP 地址的访问。例如,让我们使用 1.2.3.4。
作为附加条件,我希望规则在重新启动 Docker 守护程序和重新启动服务器后仍然存在。这允许我在服务器重新启动时使用iptables-persistent( iptables-save/ iptables-restore) 来恢复规则,而不会dockerd干扰它的启动。
我尝试了以下方法:
修改FORWARD链:
iptables -I FORWARD -p tcp --dport 3306 -j REJECT
iptables -I FORWARD -p tcp --dport 3306 -s 1.2.3.4 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
这在启动 Docker 守护进程后完成。重新启动守护进程时,Docker 在链的顶部插入了额外的规则,而我的自定义规则最终会被忽略。
修改DOCKER链:
iptables -N DOCKER # if chain does not yet exist
iptables -I DOCKER -p tcp --dport 3306 -j REJECT
iptables -I DOCKER -p tcp --dport 3306 -s 1.2.3.4 …Run Code Online (Sandbox Code Playgroud)考虑以下docker-compose文件
version: "2"
services:
postgres:
image: postgres:9.6
volumes:
- ./vol_folder:/var/lib/postgresql
ports:
- "5432:5432"
Run Code Online (Sandbox Code Playgroud)
这是我的命令历史记录 mac
docker-compose up
psql -h 192.168.99.100 -p 5432 -U postgres
create table test (my_id bigserial primary key);
INSERT INTO test (my_id) values (1);
SELECT * FROM test;
\q
Run Code Online (Sandbox Code Playgroud)
本来我认为上面的命令会导致在主机中.sql创建一个文件./vol_folder。但我没有看到任何.sql文件,./vol_folder而只是一个空data目录./vol_folder
此外,如果我docker-compose down和docker-compose up我再次可以看到数据库中的数据我现在没有了。
我怀疑当我在映像运行时创建数据时,数据没有存储回,./vol_folder因此当我重新启动时,主机上没有任何东西可以挂载。
所以我想我的问题是我的主机中存储的卷在哪里?docker volume 只有一种方式(例如,主机数据到容器)而不是两种方式吗?
我在跑 :
$ docker build -t somefile .
Run Code Online (Sandbox Code Playgroud)
每次我运行时都会收到此错误:
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat
Run Code Online (Sandbox Code Playgroud)
完整的错误是:
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/someusername/code/Dockerfile: no such file or directory
Run Code Online (Sandbox Code Playgroud)
我认为这与我使用的 docker 版本有关,因此使用本指南升级到最新版本: 安装最新的 docker 版本。我仍然遇到同样的错误。我尝试过不同的 docker 版本。我在不同的服务器上尝试过。我什至尝试过不同的 docker 文件。
我试过的最后一台服务器使用的是这个版本的 docker:
Docker version 17.03.1-ce, build c6d412e
Run Code Online (Sandbox Code Playgroud)
不知道我哪里出错了。请需要进行健全性检查。
docker ×10
linux ×3
postgresql ×2
containers ×1
debian ×1
iptables ×1
ipv6 ×1
logging ×1
netcat ×1
networking ×1
nginx ×1
permissions ×1
smtp ×1
supervisord ×1
ubuntu-16.04 ×1
windows ×1
windows-10 ×1