【问题标题】:Connecting FTP container works with docker-compose and not with docker run连接 FTP 容器适用于 docker-compose 而不是 docker run
【发布时间】:2019-01-23 09:51:04
【问题描述】:

我需要从 my_go_app 容器连接 FTP 服务器。 当我从 docker compose 中执行此操作时,我可以这样做:

apk add lftp
lftp -d ftp://julien:test@ftpd-server

而且连接良好

但是当我尝试通过docker run 运行我的容器时,我无法再连接到 FTP 服务器

这里是我使用的命令:

docker run --name my_go_app --rm -v volume:/go my_go_app:exp --network=my_go_app_network --env-file ./test.env

这是工作的 docker-compose.yml

version: '3'

services:
  my_go_app:
    image: my_go_app:exp
    volumes:
      - ./volume:/go
    networks:
      my_go_app_network:
    env_file:
      - test.env

  ftpd-server:
    container_name: ftpd-server
    image: stilliard/pure-ftpd:hardened
    ports:
      - "21:21"
      - "30000-30009:30000-30000"
    environment:
      PUBLICHOST: "0.0.0.0"
      FTP_USER_NAME: "julien"
      FTP_USER_PASS: "test"
      FTP_USER_HOME: "/home/www/julien"
    restart: on-failure
    networks:
      my_go_app_network:

networks:
  my_go_app_network:
    external: true

编辑:

我将网络添加为外部网络并手动创建它:

 docker network create my_go_app_network

现在看来 my_go_app 是默认网络的一部分:

my_go_app git:(tests) ✗ docker inspect my_go_app -f "{{json .NetworkSettings.Networks }}"         
{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"62b2dff15ff00d5cd56c966cc562b8013d06f18750e3986db530fbb4dc4cfba7","EndpointID":"6d0a81a83cdf639ff13635f0a38eeb962075cd729181b7c60fadd43446e13607","Gateway":"172.17.0.1","IPAddress":"172.17.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:11:00:02","DriverOpts":null}}


➜  my_go_app git:(tests) ✗ docker network ls
  NETWORK ID          NAME                DRIVER              SCOPE
  62b2dff15ff0        bridge              bridge              local
  f33ab34dd91d        host                host                local
  ee2d604d6604        none                null                local
  61a661c82262        my_go_app_network      bridge              local

我错过了什么?

【问题讨论】:

  • 很抱歉,如果这是显而易见的,但是您是否仔细检查过(使用docker ps)两个容器都按预期启动并运行?此外,值得检查每个容器的日志中的内容 - 那里通常有有用的线索。
  • 是的,两个容器都已启动,日志中没有错误

标签: docker docker-compose


【解决方案1】:

您的网络 my_go_app_network 应声明为“外部”,否则 compose 将创建一个名为“project_name_my_go_app_network”的网络。因此,您的 go 应用程序与 ftp 服务器不在同一个网络中。

(我猜你已经手动创建了my_go_app_network,所以你的docker run 没有抛出任何找不到网络的错误。)

编辑

你把论据的顺序弄错了。图像名称必须是最后一个,否则它们被视为容器的“命令”。试试

docker run --name my_go_app --rm -v volume:/go --network=my_go_app_network --env-file ./test.env my_go_app:exp

【讨论】:

  • 是的,他们不在同一个网络中,但不知道为什么。我手动创建了一个网络并将其用作 docker compose 中的外部网络,但是当我执行 docker run 时,它仍然在默认网络中运行,即使我使用 --network=my_go_app_network 也是如此。不知道为什么
  • 是的,这就是问题所在。订单有什么额外的限制吗?有没有提到它的文档?
  • 你可以使用docker run --help,它给你docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • @Siyuhi,你能快速看看我的容器化 ftp-server 吗? stackoverflow.com/questions/64438942/…
猜你喜欢
  • 2021-09-05
  • 2017-03-06
  • 2017-07-28
  • 2020-01-06
  • 2019-04-14
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多