我刚刚在 Ubuntu 20.04 上安装了 docker,并注意到 docker 必须作为 sudo 运行。
\nwolf@linux:~$ docker ps\nGot permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json: dial unix /var/run/docker.sock: connect: permission denied\nwolf@linux:~$ \n\nwolf@linux:~$ sudo docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\nwolf@linux:~$ \nRun Code Online (Sandbox Code Playgroud)\n找到了这个教程并尝试遵循它
\n步骤2 \xe2\x80\x94 不使用sudo执行Docker命令(可选)
\nhttps://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04
\nwolf@linux:~$ sudo usermod -aG docker ${USER}\nwolf@linux:~$ su - ${USER}\nPassword: \nwolf@linux:~$\nRun Code Online (Sandbox Code Playgroud)\n这里好像还好。
\nwolf@linux:~$ id -nG\nwolf docker\nwolf@linux:~$ \n\nwolf@linux:~$ docker ps\nCONTAINER ID IMAGE COMMAND CREATED STATUS …Run Code Online (Sandbox Code Playgroud) 我有一个由 nginx 代理的 Angular Web 应用程序。应用程序中有一个 websocet 功能,相关部分如下所示:
location /ws {
proxy_http_version 1.1;
proxy_set_header Connection "Upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_pass http://websocket.server:9090/ws;
proxy_set_header Host $host;
}
Run Code Online (Sandbox Code Playgroud)
docker-composenginx 是 dockerized 的,并通过自定义构建的映像在我的机器上运行:
FROM node:alpine as node-build
WORKDIR /app
ADD ...
RUN npm install
RUN npm run build --prod
FROM nginx:alpine
ADD nginx.conf ./
COPY --from=node-build /app/... /usr/share/nginx/html
Run Code Online (Sandbox Code Playgroud)
version: "3"
services:
frontend:
build:
context: .
ports:
- 4200:80
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)
除了其他几个位置之外,nginx.conf 中没有其他任何内容:
server {
listen 80;
server_name frontend;
location / {...}
location …Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个 AWS ECS 集群,该集群有一个任务,该任务有 3 个单独的容器用于 prometheus、promscale 和 prometheus-ecs-discovery。
我试图弄清楚如何动态地将PROMSCALE_HOSTNAMEprometheus 容器中的环境变量设置为 promscale 容器的主机名或 ip,因为我最终在配置文件中使用此值,以便 prometheus 容器可以与 promscale 通信容器。
有什么办法可以做到这一点,或者我是否必须在我的 VPC 中创建一个负载均衡器来处理这个问题?
PrometheusTask:
Type: AWS::ECS::TaskDefinition
Properties:
Family: !Sub "${Stage}-prometheus"
ContainerDefinitions:
- Name: !Sub "${Stage}-prometheus-container"
Image: myorg/prometheus:latest
Environment:
- Name: STAGE
Value: !Ref Stage
- Name: PROMSCALE_HOSTNAME # <-- I WANT THIS VALUE TO BE THE HOSTNAME OR IP OF THE PROMSCALE CONTAINER
Value: !Sub "${Stage}-promscale-container"
- Name: !Sub "${Stage}-prometheus-ecs-discovery-container"
Image: myorg/prometheus-ecs-discovery:latest
Environment:
- Name: AWS_REGION
Value: !Ref AWS::Region
- …Run Code Online (Sandbox Code Playgroud) 在安装我的centos Stream 8操作系统期间,我给/var设置了10GB的大小,认为这已经足够了,但是在我开始使用docker之后,我发现它在/var分区上占用了太多空间,如下所示df 命令:
\n[root@compute-07 ~]# df -h\nFilesystem Size Used Avail Use% Mounted on\ndevtmpfs 28G 0 28G 0% /dev\ntmpfs 28G 0 28G 0% /dev/shm\ntmpfs 28G 179M 28G 1% /run\ntmpfs 28G 0 28G 0% /sys/fs/cgroup\n/dev/mapper/cs-root 371G 8.2G 363G 3% /\n/dev/mapper/cs-home 100G 2.0G 98G 2% /home\n/dev/mapper/cs-var 10G 9.0G 1.1G 90% /var\n/dev/sda2 2.0G 412M 1.6G 21% /boot\n/dev/sda1 2.0G 7.3M 2.0G 1% /boot/efi\n/dev/mapper/cs-tmp 10G 105M 9.9G 2% /tmp\ntmpfs 5.5G 16K 5.5G 1% /run/user/42\noverlay 10G 9.0G 1.1G 90% \n\n/var/lib/docker/overlay2/77f74478297ca61595f0003d35c7323ec627adb44d94cef92c2b4a3c97319a66/merged\noverlay 10G 9.0G 1.1G 90% /var/lib/docker/overlay2/5eeb399ce4a3c0d8065d63123985269a359fa66f4d20a8486326e466a48a0128/merged\noverlay …Run Code Online (Sandbox Code Playgroud) 我有一个简单的Dockerfile:
FROM node:4.2.2
EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)
当我运行时docker build -t myapp .,它会显示下载内容的大小:
尽管 NodeJS 本身不大于 30Mb,但它似乎大于 200Mb。正在下载的其他东西是什么?
我有一个在 Windows Server 2012 R2 上运行的 CentOS 7 Hyper-V VM,它充当我的 Docker 主机。我正在尝试使用 Docker 的 macvlan 网络驱动程序将我的容器与其他 VM 放在 LAN 中。
网络:
docker create network -d macvlan --subnet=10.1.0.0/24 --gateway=10.1.0.1 -o parent=eth0 macnet
Run Code Online (Sandbox Code Playgroud)
容器:
docker run --net=macnet -it --ip=10.1.0.2 ubuntu bash
Run Code Online (Sandbox Code Playgroud)
从容器中,我无法 ping 网关。我tcpdump -n -i eth0在 Docker 主机上做了,看到arp来自容器的请求,但没有回复。Docker 主机 VM 的 NIC 是一个外部网络虚拟交换机,我怀疑这就是原因。是否有一些我遗漏的配置?
我在运行我的 mysql docker 时遇到了一些麻烦。这是我的错误:
testmysql | + echo 'Finished mysql_install_db'
testmysql | Finished mysql_install_db
testmysql | + pid=59
testmysql | + mysql=(mysql --protocol=socket -uroot -hlocalhost --socket=/var/run/mysqld/mysqld.sock)
testmysql | + for i in '{30..0}'
testmysql | + mysqld --verbose --skip-networking --socket=/var/run/mysqld/mysqld.sock
testmysql | + echo 'SELECT 1'
testmysql | + mysql --protocol=socket -uroot -hlocalhost '--socket=/var/run/mysqld/mysqld.sock --verbose'
testmysql | + echo 'MySQL init process in progress...'
testmysql | + sleep 1
testmysql | MySQL init process in progress...
testmysql | 2017-02-06 21:44:19 …Run Code Online (Sandbox Code Playgroud) 例如,当我浏览
http://example.com/foo?x=1&y=2
nginx 将我重定向到
https://example.com/foo?x=1&y=2?x=1&y=2
现在,如果我继续重定向,我会得到
https://example.com/foo?x=1&y=2?x=1&y=2?x=1&y=2?x=1&y=2
它不断加倍参数,不知道我做错了什么。
我的 nginx 配置:
server {
listen 80;
listen 443 ssl;
server_name {{ .SERVER_NAME }} www.{{ .SERVER_NAME }};
ssl_certificate /etc/ssl/nginx.crt;
ssl_certificate_key /etc/ssl/nginx.key;
if ($http_x_forwarded_proto != "https") {
rewrite ^(.*)$ https://$server_name$REQUEST_URI permanent;
}
# Nginx will reject anything not matching /
location / {
# Reject requests with unsupported HTTP method
if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE|PATCH)$) {
return 405;
}
# Only requests matching the whitelist expectations will
# get sent to the application server …Run Code Online (Sandbox Code Playgroud) 我有以下 Dockerfile 应该启动 Centos 机器并安装 httpd:
FROM centos:centos6.6
RUN yum install -y httpd
RUN chkconfig httpd on;
RUN /etc/init.d/httpd start
EXPOSE 80
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
我构建图像:
docker build --no-cache -t centos_http .
Run Code Online (Sandbox Code Playgroud)
构建说:
...
Step 4/6 : RUN /etc/init.d/httpd start
---> Running in 0766e84ec292
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2 for ServerName
[ OK ]
...
Successfully built 5380a0bacdfb
Run Code Online (Sandbox Code Playgroud)
但是如果我运行图像:
docker run -p 8090:80 -it 5380
[root@eda7400a46a9 /]# ps -ef | grep …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个精简的 Centos 7.4 图像。我想删除我不需要的东西,并想保留 Python 和 Yum。首先,我想摆脱 systemd。
我正在建立我的形象:
sudo docker build --squash --compress -t smaller-centos smaller-centos
Run Code Online (Sandbox Code Playgroud)
Dockerfile:
FROM centos
RUN rpm -e --nodeps systemd
RUN yum remove -y dracut-033-502.el7_4.1.x86_64 iputils-20160308-10.el7.x86_64 device-mapper-1.02.140-8.el7.x86_64 dbus-1.6.12-17.el7.x86_64 kpartx-0.4.9-111.el7_4.2.x86_64 cryptsetup-libs-1.7.4-3.el7_4.1.x86_64 kpartx-0.4.9-111.el7_4.2.x86_64 acl-2.2.51-12.el7.x86_64 bind-license-9.9.4-51.el7_4.2.noarch cryptsetup-libs-1.7.4-3.el7_4.1.x86_64dbus-1.6.12-17.el7.x86_64 dbus-python-1.1.1-9.el7.x86_64 hostname-3.13-3.el7.x86_64 iputils-20160308-10.el7.x86_64 kmod-libs-20-15.el7_4.7.x86_64 passwd-0.79-4.el7.x86_64 python-gobject-base-3.22.0-1.el7_4.1.x86_64 qrencode-libs-3.4.1-3.el7.x86_64 rootfiles-8.1-11.el7.noarch vim-minimal-7.4.160-2.el7.x86_64
RUN yum clean all
CMD ["/bin/bash"]
Run Code Online (Sandbox Code Playgroud)
我删除了一些图像,但新图像仍然比原始图像大。
$ 须藤泊坞窗图像
smaller-centos latest 59c3425f7909 2 minutes ago 219MB
centos latest e934aafc2206 4 weeks ago 199MB
Run Code Online (Sandbox Code Playgroud)
$ sudo docker 版本
Client:
Version: 18.03.1-ce
API version: …Run Code Online (Sandbox Code Playgroud) docker ×10
nginx ×2
amazon-ecs ×1
centos ×1
filesystems ×1
httpd ×1
hyper-v ×1
lvm ×1
mysql ×1
node.js ×1
partition ×1
redirect ×1
ssl ×1
ubuntu ×1
ubuntu-20.04 ×1